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
- MessageEventSubscriptionService.cs
- Stackframe.cs
- AutomationElementCollection.cs
- SchemaCollectionCompiler.cs
- Vector.cs
- SoapSchemaMember.cs
- DeclarativeExpressionConditionDeclaration.cs
- ExternalDataExchangeService.cs
- ConfigLoader.cs
- SqlProcedureAttribute.cs
- TemplateBindingExtension.cs
- SizeAnimation.cs
- ReflectionUtil.cs
- Unit.cs
- PartialCachingAttribute.cs
- NTAccount.cs
- DefaultWorkflowSchedulerService.cs
- Site.cs
- NullableFloatMinMaxAggregationOperator.cs
- IndexOutOfRangeException.cs
- SqlConnectionHelper.cs
- SystemColorTracker.cs
- mediaeventshelper.cs
- Rect.cs
- SoapExtensionStream.cs
- DSASignatureDeformatter.cs
- XmlMembersMapping.cs
- ReadOnlyObservableCollection.cs
- TextServicesLoader.cs
- DesignerActionUIService.cs
- ConstructorExpr.cs
- PropertyFilter.cs
- ImageAnimator.cs
- XPathDocument.cs
- regiisutil.cs
- DataGridViewTopLeftHeaderCell.cs
- EntityViewContainer.cs
- HtmlSelect.cs
- sqlmetadatafactory.cs
- SimpleLine.cs
- _WinHttpWebProxyDataBuilder.cs
- OleDbRowUpdatingEvent.cs
- UnsafeNativeMethods.cs
- XmlSchemaAnnotation.cs
- DesignTableCollection.cs
- RectangleGeometry.cs
- ElapsedEventArgs.cs
- ModuleBuilderData.cs
- TableCell.cs
- CollectionAdapters.cs
- PageRequestManager.cs
- TabControlDesigner.cs
- ControlBuilderAttribute.cs
- ZipFileInfoCollection.cs
- OptionalColumn.cs
- TraversalRequest.cs
- GroupByExpressionRewriter.cs
- XPathAncestorQuery.cs
- TextOutput.cs
- Deserializer.cs
- DragEvent.cs
- DbParameterCollection.cs
- PageContent.cs
- InputScope.cs
- CrossSiteScriptingValidation.cs
- GenericsInstances.cs
- SqlClientWrapperSmiStreamChars.cs
- ApplicationCommands.cs
- UntrustedRecipientException.cs
- CommandHelpers.cs
- safex509handles.cs
- RequestResizeEvent.cs
- PageAction.cs
- DesignerActionHeaderItem.cs
- SchemaNamespaceManager.cs
- Stack.cs
- XmlSchemaException.cs
- ItemContainerGenerator.cs
- TemplateInstanceAttribute.cs
- WebDescriptionAttribute.cs
- MeasureItemEvent.cs
- InheritablePropertyChangeInfo.cs
- EntityContainerEntitySet.cs
- MenuBase.cs
- SQLInt16.cs
- RuntimeDelegateArgument.cs
- ContextStack.cs
- AnyReturnReader.cs
- InvalidOleVariantTypeException.cs
- CollectionViewProxy.cs
- CompoundFileStorageReference.cs
- SubMenuStyleCollection.cs
- EdmPropertyAttribute.cs
- Focus.cs
- RichTextBoxAutomationPeer.cs
- DrawingCollection.cs
- StrokeFIndices.cs
- CharAnimationBase.cs
- MinMaxParagraphWidth.cs
- PerfProviderCollection.cs