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
- MappedMetaModel.cs
- ScrollItemPattern.cs
- ObfuscateAssemblyAttribute.cs
- ConfigurationSectionCollection.cs
- InputLanguageCollection.cs
- SignatureToken.cs
- WindowsStreamSecurityElement.cs
- AttachedPropertiesService.cs
- CommandHelper.cs
- RuntimeHandles.cs
- MetadataCacheItem.cs
- FontUnitConverter.cs
- ValidatedControlConverter.cs
- PanelStyle.cs
- AppSettingsReader.cs
- BindingFormattingDialog.cs
- ObjectHandle.cs
- BackgroundFormatInfo.cs
- BitmapVisualManager.cs
- SmiRequestExecutor.cs
- EntityParameterCollection.cs
- FieldReference.cs
- TraceUtils.cs
- MultiSelector.cs
- AsymmetricSignatureFormatter.cs
- GroupQuery.cs
- PropertyInformationCollection.cs
- Literal.cs
- Soap12ProtocolReflector.cs
- HtmlLink.cs
- IPAddress.cs
- SystemWebCachingSectionGroup.cs
- KeyValueSerializer.cs
- HTMLTextWriter.cs
- UrlPropertyAttribute.cs
- ConstraintCollection.cs
- EntityDataSourceMemberPath.cs
- SmtpNegotiateAuthenticationModule.cs
- _Win32.cs
- NavigationService.cs
- HtmlMobileTextWriter.cs
- DataListItem.cs
- ReflectEventDescriptor.cs
- RegexCompilationInfo.cs
- ReachUIElementCollectionSerializerAsync.cs
- IIS7UserPrincipal.cs
- PermissionListSet.cs
- TogglePattern.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- DrawingBrush.cs
- FixedPageAutomationPeer.cs
- CountAggregationOperator.cs
- DesigntimeLicenseContextSerializer.cs
- ApplicationContext.cs
- RequestDescription.cs
- PropertyGridCommands.cs
- LayoutEvent.cs
- SchemaReference.cs
- WindowsEditBoxRange.cs
- FormViewUpdatedEventArgs.cs
- DrawListViewSubItemEventArgs.cs
- SecurityDescriptor.cs
- ExpressionNormalizer.cs
- ServerValidateEventArgs.cs
- FieldToken.cs
- ToolStripTextBox.cs
- SortQuery.cs
- RectValueSerializer.cs
- ItemsPanelTemplate.cs
- CounterSample.cs
- brushes.cs
- TextServicesProperty.cs
- TemplateKey.cs
- DesignerSelectionListAdapter.cs
- GroupBoxAutomationPeer.cs
- RelOps.cs
- XmlSchemaAnnotated.cs
- RequestCacheManager.cs
- XomlCompilerResults.cs
- CellQuery.cs
- DES.cs
- CodeSnippetExpression.cs
- LoadedEvent.cs
- AsymmetricKeyExchangeFormatter.cs
- updatecommandorderer.cs
- Stylus.cs
- SapiRecognizer.cs
- SafeReadContext.cs
- AnimationException.cs
- DrawingAttributes.cs
- TypedTableBase.cs
- OracleTimeSpan.cs
- HtmlControlPersistable.cs
- StructuralObject.cs
- COM2IProvidePropertyBuilderHandler.cs
- BindingContext.cs
- User.cs
- DataKeyArray.cs
- GlyphRun.cs
- BorderGapMaskConverter.cs