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
- TryCatchDesigner.xaml.cs
- EnumerableRowCollectionExtensions.cs
- OutputCacheSection.cs
- ProfileGroupSettings.cs
- TargetControlTypeAttribute.cs
- OdbcException.cs
- SafeRightsManagementHandle.cs
- InputBuffer.cs
- ObjectPersistData.cs
- TextProperties.cs
- ConfigsHelper.cs
- TableSectionStyle.cs
- XmlSchema.cs
- DbParameterHelper.cs
- TextDecorationCollection.cs
- BuildProvider.cs
- MemoryMappedViewAccessor.cs
- WorkerRequest.cs
- DataBindingExpressionBuilder.cs
- ValueSerializer.cs
- CaseStatementSlot.cs
- ParameterInfo.cs
- Simplifier.cs
- EventManager.cs
- ImageCodecInfo.cs
- EnvelopeVersion.cs
- CellParagraph.cs
- PrinterResolution.cs
- ConfigurationStrings.cs
- DataGridViewControlCollection.cs
- GridSplitterAutomationPeer.cs
- RegisteredScript.cs
- Message.cs
- ProfileManager.cs
- DataRowExtensions.cs
- DocumentGridContextMenu.cs
- DomNameTable.cs
- ExpressionBindingCollection.cs
- RegexTypeEditor.cs
- DataGridViewAccessibleObject.cs
- XmlValueConverter.cs
- ImageFormatConverter.cs
- HtmlInputImage.cs
- EdmItemCollection.cs
- GenericTypeParameterBuilder.cs
- ThemeDictionaryExtension.cs
- ADMembershipUser.cs
- BitmapEffectDrawingContextWalker.cs
- RuleValidation.cs
- SqlMultiplexer.cs
- FolderBrowserDialog.cs
- MetadataArtifactLoaderFile.cs
- ScriptReference.cs
- Qualifier.cs
- EntityDataSourceDataSelection.cs
- OpenTypeCommon.cs
- GetRecipientRequest.cs
- BulletedList.cs
- LogWriteRestartAreaState.cs
- PageParserFilter.cs
- _FtpDataStream.cs
- ParameterRetriever.cs
- InnerItemCollectionView.cs
- GACMembershipCondition.cs
- BitmapMetadata.cs
- StrongNameKeyPair.cs
- CSharpCodeProvider.cs
- VectorAnimationBase.cs
- DataRow.cs
- Profiler.cs
- TextTreeObjectNode.cs
- InternalPermissions.cs
- SynchronizationContextHelper.cs
- UnsafeNativeMethodsCLR.cs
- MulticastOption.cs
- TransformPattern.cs
- WinFormsComponentEditor.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- StagingAreaInputItem.cs
- Random.cs
- ModelItem.cs
- ServiceModelActivationSectionGroup.cs
- ServiceContractGenerationContext.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- ContextDataSourceView.cs
- ContentControl.cs
- VirtualizedCellInfoCollection.cs
- XmlArrayItemAttribute.cs
- StateWorkerRequest.cs
- AppDomainUnloadedException.cs
- LineGeometry.cs
- ExpressionNormalizer.cs
- ObjectListTitleAttribute.cs
- MoveSizeWinEventHandler.cs
- Sql8ConformanceChecker.cs
- SqlException.cs
- SystemPens.cs
- PageContentAsyncResult.cs
- BoundPropertyEntry.cs
- UnsafeMethods.cs