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
- AsyncSerializedWorker.cs
- LogLogRecordHeader.cs
- FormsAuthenticationUser.cs
- DetailsViewRowCollection.cs
- ActivityPropertyReference.cs
- WSSecurityOneDotOneReceiveSecurityHeader.cs
- XmlComplianceUtil.cs
- EncryptedData.cs
- SliderAutomationPeer.cs
- EventHandlersStore.cs
- PostBackOptions.cs
- ExecutedRoutedEventArgs.cs
- NativeRecognizer.cs
- ToRequest.cs
- VectorKeyFrameCollection.cs
- AssemblyFilter.cs
- Panel.cs
- ValueSerializerAttribute.cs
- DataViewSetting.cs
- SecurityUtils.cs
- PropertyMapper.cs
- FixedPosition.cs
- PointUtil.cs
- ModelVisual3D.cs
- XmlSchemaGroup.cs
- MeasurementDCInfo.cs
- ImageFormat.cs
- RawAppCommandInputReport.cs
- SetStateEventArgs.cs
- TextEncodedRawTextWriter.cs
- DeleteHelper.cs
- PagerSettings.cs
- AppDomainShutdownMonitor.cs
- ExpressionNode.cs
- OutputBuffer.cs
- TimerExtension.cs
- ServicePointManagerElement.cs
- WinFormsSpinner.cs
- BinarySerializer.cs
- BigInt.cs
- SmtpDigestAuthenticationModule.cs
- OdbcParameter.cs
- LogicalMethodInfo.cs
- IconConverter.cs
- MessageQueueKey.cs
- ProxyWebPart.cs
- Base64WriteStateInfo.cs
- PriorityQueue.cs
- UnionCqlBlock.cs
- XmlSchemaAnyAttribute.cs
- XNodeSchemaApplier.cs
- DllNotFoundException.cs
- BufferModeSettings.cs
- DependencyPropertyValueSerializer.cs
- ModifierKeysConverter.cs
- EmptyReadOnlyDictionaryInternal.cs
- _AutoWebProxyScriptHelper.cs
- CodeObject.cs
- BitmapScalingModeValidation.cs
- DataListComponentEditor.cs
- NativeMethods.cs
- XPathNavigatorKeyComparer.cs
- EventListenerClientSide.cs
- EntityDataSourceState.cs
- PageParserFilter.cs
- SkipStoryboardToFill.cs
- OperatorExpressions.cs
- GregorianCalendarHelper.cs
- QuaternionValueSerializer.cs
- _BaseOverlappedAsyncResult.cs
- ObjectDataSourceEventArgs.cs
- BitmapEffectOutputConnector.cs
- FixUpCollection.cs
- WebPartMinimizeVerb.cs
- ChameleonKey.cs
- EditingScopeUndoUnit.cs
- VersionedStream.cs
- TrackingMemoryStream.cs
- SessionStateModule.cs
- NullReferenceException.cs
- StaticExtension.cs
- Drawing.cs
- SectionInput.cs
- Variant.cs
- SignedPkcs7.cs
- XmlConvert.cs
- TypeReference.cs
- COM2EnumConverter.cs
- RangeBaseAutomationPeer.cs
- SimpleApplicationHost.cs
- LockedAssemblyCache.cs
- _NestedMultipleAsyncResult.cs
- BamlRecords.cs
- DataContract.cs
- ChtmlTextBoxAdapter.cs
- DesignerDataSchemaClass.cs
- RelationshipFixer.cs
- ObjectDataSourceMethodEditor.cs
- IisTraceWebEventProvider.cs
- x509utils.cs