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
- HtmlTernaryTree.cs
- SHA384.cs
- HtmlWindow.cs
- DispatchChannelSink.cs
- ClassHandlersStore.cs
- ValidationPropertyAttribute.cs
- WorkflowViewStateService.cs
- SqlBooleanMismatchVisitor.cs
- Storyboard.cs
- Enumerable.cs
- ReceiveContext.cs
- SkewTransform.cs
- PropertyTabAttribute.cs
- MarkupObject.cs
- FixedTextView.cs
- AnimatedTypeHelpers.cs
- Bits.cs
- EntityModelBuildProvider.cs
- WindowsPrincipal.cs
- TcpProcessProtocolHandler.cs
- InvalidProgramException.cs
- HtmlMeta.cs
- Point3DKeyFrameCollection.cs
- XmlSchemaGroup.cs
- SqlDataSourceQuery.cs
- DesignerAttribute.cs
- EdmItemCollection.cs
- EventDescriptor.cs
- EventSourceCreationData.cs
- ObjectPropertyMapping.cs
- ServiceDiscoveryBehavior.cs
- QilFactory.cs
- embossbitmapeffect.cs
- Rijndael.cs
- SkipStoryboardToFill.cs
- TraceListeners.cs
- DockPanel.cs
- SessionEndingEventArgs.cs
- TextSelectionHelper.cs
- MetadataFile.cs
- SqlConnectionStringBuilder.cs
- MemberMaps.cs
- ThemeDirectoryCompiler.cs
- GridViewDeleteEventArgs.cs
- TcpProcessProtocolHandler.cs
- XmlILConstructAnalyzer.cs
- ProcessHostConfigUtils.cs
- Content.cs
- EntityContainer.cs
- AsymmetricSignatureFormatter.cs
- UdpDiscoveryEndpointProvider.cs
- DrawToolTipEventArgs.cs
- WebProxyScriptElement.cs
- ErrorEventArgs.cs
- UnsettableComboBox.cs
- VectorConverter.cs
- RestHandlerFactory.cs
- SafeLibraryHandle.cs
- CurrentChangingEventArgs.cs
- ActivityTypeDesigner.xaml.cs
- BaseResourcesBuildProvider.cs
- MailWebEventProvider.cs
- IISUnsafeMethods.cs
- PlainXmlSerializer.cs
- ObjectConverter.cs
- LogFlushAsyncResult.cs
- SignedInfo.cs
- OrderByQueryOptionExpression.cs
- DataGridViewRowPrePaintEventArgs.cs
- HelpEvent.cs
- DataObject.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- PartManifestEntry.cs
- SubpageParaClient.cs
- HtmlInputRadioButton.cs
- InvalidPrinterException.cs
- LedgerEntryCollection.cs
- TypeCacheManager.cs
- CqlLexerHelpers.cs
- ProjectionQueryOptionExpression.cs
- LoadRetryHandler.cs
- ValueTable.cs
- FilterException.cs
- DataGridViewCellStyle.cs
- DeriveBytes.cs
- ColorBuilder.cs
- VirtualizedCellInfoCollection.cs
- ListSurrogate.cs
- ArrayTypeMismatchException.cs
- EndpointConfigContainer.cs
- WebConfigurationManager.cs
- BitmapPalettes.cs
- safemediahandle.cs
- TemplateControlCodeDomTreeGenerator.cs
- PrintPreviewGraphics.cs
- ProfileEventArgs.cs
- ProfileServiceManager.cs
- LabelEditEvent.cs
- PenThreadPool.cs
- WrappedReader.cs