Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / MetaForeignKeyColumn.cs / 1305376 / MetaForeignKeyColumn.cs
using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Security.Permissions; using System.Web.DynamicData.ModelProviders; using System.Linq; using System.Web.UI; namespace System.Web.DynamicData { ////// A special column representing many-1 relationships /// public class MetaForeignKeyColumn : MetaColumn, IMetaForeignKeyColumn { // Maps a foreign key name to the name that should be used in a Linq expression for filtering // i.e. the foreignkey name might be surfaced through a custom type descriptor e.g. CategoryID but we might really want to use // Category.CategoryId in the expression private Dictionary_foreignKeyFilterMapping; public MetaForeignKeyColumn(MetaTable table, ColumnProvider entityMember) : base(table, entityMember) { } /// /// Perform initialization logic for this column /// internal protected override void Initialize() { base.Initialize(); ParentTable = Model.GetTable(Provider.Association.ToTable.Name, Table.DataContextType); CreateForeignKeyFilterMapping(ForeignKeyNames, ParentTable.PrimaryKeyNames, (foreignKey) => Table.EntityType.GetProperty(foreignKey) != null); } internal void CreateForeignKeyFilterMapping(IListforeignKeyNames, IList primaryKeyNames, Func propertyExists) { // HACK: Some tests don't mock foreign key names, but this should never be the case at runtime if (foreignKeyNames == null) { return; } int pKIndex = 0; foreach (string fkName in foreignKeyNames) { if (!propertyExists(fkName)) { if (_foreignKeyFilterMapping == null) { _foreignKeyFilterMapping = new Dictionary (); } _foreignKeyFilterMapping[fkName] = Name + "." + primaryKeyNames[pKIndex]; } pKIndex++; } } /// /// The parent table of the relationship (e.g. Categories in Products->Categories) /// public MetaTable ParentTable { get; // internal for unit testing internal set; } ////// Returns true if this foriegn key column is part of the primary key of its table /// e.g. Order and Product are PKs in the Order_Details table /// public bool IsPrimaryKeyInThisTable { get { return Provider.Association.IsPrimaryKeyInThisTable; } } ////// This is used when saving the value of a foreign key, e.g. when selected from a drop down. /// public void ExtractForeignKey(IDictionary dictionary, string value) { if (String.IsNullOrEmpty(value)) { // If the value is null, set all the FKs to null foreach (string fkName in ForeignKeyNames) { dictionary[fkName] = null; } } else { string[] fkValues = Misc.ParseCommaSeparatedString(value); Debug.Assert(fkValues.Length == ForeignKeyNames.Count); for (int i = 0; i < fkValues.Length; i++) { dictionary[ForeignKeyNames[i]] = fkValues[i]; } } } ////// Return the value of all the foreign keys components for the passed in row /// public IList
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InspectionWorker.cs
- SecurityRuntime.cs
- EditorZoneAutoFormat.cs
- GenericsInstances.cs
- LicenseException.cs
- UniqueConstraint.cs
- PrintPreviewGraphics.cs
- WorkflowOperationFault.cs
- BitmapEffectInputConnector.cs
- Grid.cs
- TextAutomationPeer.cs
- Validator.cs
- WebControlAdapter.cs
- KeyTime.cs
- CharAnimationBase.cs
- ClientApiGenerator.cs
- Pair.cs
- TableItemProviderWrapper.cs
- PrivilegedConfigurationManager.cs
- MustUnderstandSoapException.cs
- NetworkStream.cs
- GenericTextProperties.cs
- BrowserCapabilitiesCodeGenerator.cs
- ErrorActivity.cs
- ProcessExitedException.cs
- NameTable.cs
- FormViewInsertEventArgs.cs
- HtmlInputRadioButton.cs
- FunctionQuery.cs
- FileDialog_Vista_Interop.cs
- HttpVersion.cs
- diagnosticsswitches.cs
- Normalization.cs
- RowSpanVector.cs
- ProfileInfo.cs
- BaseAsyncResult.cs
- GridViewRow.cs
- X509Extension.cs
- SQLDateTimeStorage.cs
- TextInfo.cs
- ResourceDefaultValueAttribute.cs
- InputProviderSite.cs
- ExpressionBuilderCollection.cs
- TemplateBaseAction.cs
- SerialErrors.cs
- AnonymousIdentificationSection.cs
- AncillaryOps.cs
- Permission.cs
- EventBuilder.cs
- _SSPIWrapper.cs
- ToolStripItemRenderEventArgs.cs
- CommentAction.cs
- Group.cs
- CommandConverter.cs
- XmlUtilWriter.cs
- DataGridViewRowEventArgs.cs
- PageWrapper.cs
- SelectionPattern.cs
- DataGridItem.cs
- ParameterReplacerVisitor.cs
- PersonalizationProvider.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- InvokeProviderWrapper.cs
- ConnectionString.cs
- ArgumentsParser.cs
- BitmapEffectGroup.cs
- TextElement.cs
- SpAudioStreamWrapper.cs
- RectKeyFrameCollection.cs
- ContainerUtilities.cs
- SystemIcons.cs
- ActivityWithResultConverter.cs
- ILGenerator.cs
- UpdateInfo.cs
- XmlSecureResolver.cs
- BuildManagerHost.cs
- RuntimeTransactionHandle.cs
- DataGridViewCheckBoxCell.cs
- MaskDesignerDialog.cs
- StrongNameIdentityPermission.cs
- LeftCellWrapper.cs
- RenamedEventArgs.cs
- AnnotationObservableCollection.cs
- HtmlInputButton.cs
- HttpInputStream.cs
- ColorAnimationUsingKeyFrames.cs
- ContractMapping.cs
- RowsCopiedEventArgs.cs
- ListItemsPage.cs
- ValidatingCollection.cs
- IndentTextWriter.cs
- SelectionEditor.cs
- ResourceReader.cs
- DocumentReference.cs
- OperationAbortedException.cs
- ProgressBar.cs
- InfoCardAsymmetricCrypto.cs
- UnsafeNativeMethodsMilCoreApi.cs
- ObjectQueryState.cs
- EmptyQuery.cs