Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / ModelProviders / DLinqAssociationProvider.cs / 1305376 / DLinqAssociationProvider.cs
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Linq.Mapping; using System.Linq; using System.Reflection; using System.Diagnostics; using System.Collections.Specialized; using System.Collections; using System.Globalization; namespace System.Web.DynamicData.ModelProviders { internal sealed class DLinqAssociationProvider : AssociationProvider { public DLinqAssociationProvider(DLinqColumnProvider column) { FromColumn = column; MetaAssociation association = column.Member.Association; SetOtherEndOfAssociation(association); SetDirection(association); Debug.Assert(Direction != AssociationDirection.ManyToMany, "Many to Many is not supported by Linq to SQL"); SetAssociationKeyInfo(association); } private void SetAssociationKeyInfo(MetaAssociation association) { DLinqColumnProvider column = (DLinqColumnProvider)FromColumn; ListforeignKeyNames = new List (); int count = column.Member.Association.ThisKey.Count; for (int i = 0; i < count; i++) { MetaDataMember thisKeyMetaDataMember = column.Member.Association.ThisKey[i]; MetaDataMember otherKeyMetaDataMember = column.Member.Association.OtherKey[i]; DLinqColumnProvider thisEntityMemberComponent = FindColumn(column.Table, thisKeyMetaDataMember.Name); if (ShouldRemoveThisAssociation(association)) { column.ShouldRemove = true; return; } foreignKeyNames.Add(thisEntityMemberComponent.Name); if (thisEntityMemberComponent.IsPrimaryKey) { IsPrimaryKeyInThisTable = true; } if (association.IsForeignKey) { thisEntityMemberComponent.IsForeignKeyComponent = true; } } ForeignKeyNames = new ReadOnlyCollection (foreignKeyNames); } private bool ShouldRemoveThisAssociation(MetaAssociation association) { if (Direction == AssociationDirection.ManyToOne && !association.OtherKeyIsPrimaryKey) { return true; } if (Direction == AssociationDirection.OneToMany && !association.ThisKeyIsPrimaryKey) { return true; } if (Direction == AssociationDirection.OneToOne) { if (!association.IsForeignKey && !association.ThisKeyIsPrimaryKey) { return true; } if (association.IsForeignKey && !association.OtherKeyIsPrimaryKey) { return true; } } return false; } private void SetOtherEndOfAssociation(MetaAssociation association) { DLinqTableProvider entityMemberParentEntity = (DLinqTableProvider)FromColumn.Table; DLinqDataModelProvider parentEntityDataContext = (DLinqDataModelProvider)entityMemberParentEntity.DataModel; if (association.OtherMember != null) { ToColumn = parentEntityDataContext.ColumnLookup[(PropertyInfo)association.OtherMember.Member]; } else { ToTable = ((DLinqDataModelProvider)FromColumn.Table.DataModel).DLinqTables.Single(tp => tp.EntityType == association.OtherType.Type); } } private static DLinqColumnProvider FindColumn(TableProvider table, String columnName) { // return (DLinqColumnProvider)table.Columns.First(member => member.Name.Equals(columnName)); } private void SetDirection(MetaAssociation association) { if (association.IsMany) { Direction = AssociationDirection.OneToMany; } else if (association.OtherMember == null || association.OtherMember.Association.IsMany) { // there might not be the other member if this is a one-sided association Direction = AssociationDirection.ManyToOne; } else { Direction = AssociationDirection.OneToOne; } } public override string GetSortExpression(ColumnProvider sortColumn) { return GetSortExpression(sortColumn, "{0}.{1}"); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TemplateBamlTreeBuilder.cs
- ReadOnlyAttribute.cs
- ToolStripSeparatorRenderEventArgs.cs
- SiteMapProvider.cs
- basenumberconverter.cs
- SpeechRecognitionEngine.cs
- PreProcessInputEventArgs.cs
- MulticastIPAddressInformationCollection.cs
- RemotingSurrogateSelector.cs
- UIHelper.cs
- RelationshipEndMember.cs
- ResourceFallbackManager.cs
- HtmlSelect.cs
- PrintPreviewDialog.cs
- XmlAttributeCollection.cs
- DependencyProperty.cs
- x509store.cs
- TypeDependencyAttribute.cs
- ScrollProperties.cs
- ListViewDeleteEventArgs.cs
- LicFileLicenseProvider.cs
- hresults.cs
- DataSetMappper.cs
- DiscoveryRequestHandler.cs
- Configuration.cs
- XmlSchemaCompilationSettings.cs
- DataStreamFromComStream.cs
- OAVariantLib.cs
- CheckedPointers.cs
- StrokeCollection.cs
- IApplicationTrustManager.cs
- Site.cs
- PageAsyncTask.cs
- XmlUrlResolver.cs
- ReplyChannelAcceptor.cs
- RadioButton.cs
- DataConnectionHelper.cs
- NativeMethods.cs
- IteratorDescriptor.cs
- BlobPersonalizationState.cs
- LinkDescriptor.cs
- GenerateHelper.cs
- MembershipUser.cs
- WindowsTitleBar.cs
- RootDesignerSerializerAttribute.cs
- SiteMapNodeCollection.cs
- HwndProxyElementProvider.cs
- FontFaceLayoutInfo.cs
- TextBoxAutoCompleteSourceConverter.cs
- ApplicationInfo.cs
- DataObjectCopyingEventArgs.cs
- CommandBinding.cs
- Item.cs
- MasterPageBuildProvider.cs
- DiagnosticTraceSource.cs
- ListBindingConverter.cs
- Lazy.cs
- XmlExtensionFunction.cs
- ExpressionBinding.cs
- KerberosSecurityTokenProvider.cs
- DataColumnMappingCollection.cs
- BaseInfoTable.cs
- XmlDocumentType.cs
- Pair.cs
- FlowNode.cs
- StreamingContext.cs
- dbenumerator.cs
- DocumentPropertiesDialog.cs
- IPAddressCollection.cs
- InputGestureCollection.cs
- GradientBrush.cs
- InvokePatternIdentifiers.cs
- RtfToXamlLexer.cs
- ClockGroup.cs
- UserControlBuildProvider.cs
- EtwProvider.cs
- ACE.cs
- SecurityMessageProperty.cs
- GlobalEventManager.cs
- SqlSupersetValidator.cs
- BrushValueSerializer.cs
- WebEventCodes.cs
- ColorTransform.cs
- mediaeventargs.cs
- UnSafeCharBuffer.cs
- DiagnosticTrace.cs
- JsonReaderWriterFactory.cs
- EntityWithKeyStrategy.cs
- shaperfactory.cs
- ResolveResponse.cs
- XamlGridLengthSerializer.cs
- ContentValidator.cs
- SessionPageStateSection.cs
- RelationshipNavigation.cs
- FormViewInsertEventArgs.cs
- DoubleLink.cs
- ToolStripContextMenu.cs
- Normalizer.cs
- TextTreeTextElementNode.cs
- LambdaCompiler.Statements.cs