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
- FormViewInsertEventArgs.cs
- VariableQuery.cs
- Typography.cs
- BaseCodePageEncoding.cs
- Focus.cs
- ControlBindingsCollection.cs
- PerformanceCounterPermissionEntry.cs
- UnsafeNativeMethods.cs
- LambdaCompiler.Logical.cs
- DataSourceHelper.cs
- JsonServiceDocumentSerializer.cs
- Form.cs
- PropertyPathWorker.cs
- MaterialGroup.cs
- WCFBuildProvider.cs
- DataComponentNameHandler.cs
- RelatedImageListAttribute.cs
- SingleSelectRootGridEntry.cs
- ArrayHelper.cs
- Attachment.cs
- XmlTextAttribute.cs
- TimeSpanMinutesConverter.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- TreeView.cs
- SettingsPropertyIsReadOnlyException.cs
- DispatcherHooks.cs
- Msec.cs
- XmlWriterTraceListener.cs
- Timer.cs
- FreeFormDragDropManager.cs
- SafePointer.cs
- SizeValueSerializer.cs
- FilterUserControlBase.cs
- relpropertyhelper.cs
- CodeStatement.cs
- WebPartUtil.cs
- BindingElement.cs
- DispatcherTimer.cs
- SchemaImporterExtension.cs
- StyleConverter.cs
- CreateUserErrorEventArgs.cs
- PackageRelationship.cs
- IDataContractSurrogate.cs
- ConfigurationLocationCollection.cs
- Button.cs
- ControlSerializer.cs
- ItemCheckedEvent.cs
- TextAnchor.cs
- FastEncoderStatics.cs
- OutputCacheSettings.cs
- SettingsPropertyValue.cs
- DataGridViewCellEventArgs.cs
- XmlNodeChangedEventManager.cs
- ToggleButtonAutomationPeer.cs
- ErrorInfoXmlDocument.cs
- ControlAdapter.cs
- RoutedPropertyChangedEventArgs.cs
- CellCreator.cs
- SqlUtils.cs
- GridToolTip.cs
- UnknownWrapper.cs
- AsyncMethodInvoker.cs
- ProfileGroupSettingsCollection.cs
- ActivityWithResultValueSerializer.cs
- EncodingConverter.cs
- CollectionViewGroupRoot.cs
- DataGridViewCellStyleChangedEventArgs.cs
- ConfigXmlText.cs
- ParallelTimeline.cs
- CopyNamespacesAction.cs
- CodeSnippetStatement.cs
- AbstractExpressions.cs
- CodeTypeParameterCollection.cs
- TabletCollection.cs
- WebReference.cs
- GAC.cs
- Signature.cs
- Exceptions.cs
- CompressionTransform.cs
- TimeStampChecker.cs
- ActiveXSite.cs
- NoPersistProperty.cs
- ChangeConflicts.cs
- StringConcat.cs
- sqlpipe.cs
- XamlFilter.cs
- SecurityTokenRequirement.cs
- ConfigurationPropertyCollection.cs
- XmlNode.cs
- ListItemConverter.cs
- Switch.cs
- XmlArrayItemAttribute.cs
- DataGridPreparingCellForEditEventArgs.cs
- __ConsoleStream.cs
- LambdaCompiler.cs
- FormCollection.cs
- FlowPosition.cs
- DataGridViewIntLinkedList.cs
- EnumBuilder.cs
- DbgUtil.cs