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
- ClientScriptManager.cs
- XamlBrushSerializer.cs
- TypeLibConverter.cs
- _Connection.cs
- ConfigsHelper.cs
- PropertyGridEditorPart.cs
- XPathCompiler.cs
- SessionEndingCancelEventArgs.cs
- SBCSCodePageEncoding.cs
- PageThemeBuildProvider.cs
- VerificationAttribute.cs
- MaxMessageSizeStream.cs
- EventOpcode.cs
- externdll.cs
- ColumnCollection.cs
- WebEvents.cs
- Scripts.cs
- WebPartConnectionsConfigureVerb.cs
- ConnectionPointCookie.cs
- TabItemWrapperAutomationPeer.cs
- ApplicationInterop.cs
- PresentationSource.cs
- FileStream.cs
- _ConnectStream.cs
- ContentAlignmentEditor.cs
- DrawingServices.cs
- ConnectionInterfaceCollection.cs
- StringUtil.cs
- Italic.cs
- MdImport.cs
- EdmFunctions.cs
- WebContentFormatHelper.cs
- InteropTrackingRecord.cs
- GroupStyle.cs
- HierarchicalDataTemplate.cs
- FileUtil.cs
- Rotation3D.cs
- httpstaticobjectscollection.cs
- Size3D.cs
- _LoggingObject.cs
- NetPeerTcpBindingCollectionElement.cs
- CalendarButton.cs
- OleDbStruct.cs
- BasicHttpBinding.cs
- HtmlAnchor.cs
- XmlEncoding.cs
- XmlText.cs
- SemanticResolver.cs
- HierarchicalDataBoundControl.cs
- DataGridPreparingCellForEditEventArgs.cs
- WindowsToolbarItemAsMenuItem.cs
- SemaphoreSecurity.cs
- Evidence.cs
- EncryptedPackage.cs
- Asn1Utilities.cs
- BufferedStream.cs
- DataColumnPropertyDescriptor.cs
- NodeCounter.cs
- KnownBoxes.cs
- InputLangChangeEvent.cs
- AdCreatedEventArgs.cs
- CustomError.cs
- GridViewHeaderRowPresenter.cs
- FrugalList.cs
- WebPartVerbsEventArgs.cs
- PostBackOptions.cs
- WindowsFont.cs
- RegexRunnerFactory.cs
- DispatchWrapper.cs
- Cursors.cs
- ObjectStateManager.cs
- FontStyle.cs
- XsdValidatingReader.cs
- TabItem.cs
- Stroke.cs
- HtmlDocument.cs
- UInt16Converter.cs
- HtmlInputRadioButton.cs
- ClientApiGenerator.cs
- DropSource.cs
- SymbolEqualComparer.cs
- MSG.cs
- x509utils.cs
- TreeNodeStyle.cs
- SpotLight.cs
- SQLMembershipProvider.cs
- BStrWrapper.cs
- ConstraintCollection.cs
- DocumentPageHost.cs
- TextViewSelectionProcessor.cs
- InlineObject.cs
- InputLanguageSource.cs
- SchemaType.cs
- EdmConstants.cs
- GlyphCache.cs
- CodeDOMProvider.cs
- UniqueIdentifierService.cs
- FilteredReadOnlyMetadataCollection.cs
- FlowDocumentPageViewerAutomationPeer.cs
- XDRSchema.cs