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
- TextRangeEditLists.cs
- TypeInitializationException.cs
- Model3DCollection.cs
- SystemException.cs
- RankException.cs
- XmlDocumentType.cs
- SequentialUshortCollection.cs
- PrintDialogException.cs
- mda.cs
- ClusterRegistryConfigurationProvider.cs
- ListItemCollection.cs
- HttpClientCredentialType.cs
- SafeNativeMethods.cs
- StringSorter.cs
- FormatConvertedBitmap.cs
- CallTemplateAction.cs
- InputLangChangeRequestEvent.cs
- TrackBarDesigner.cs
- XmlSequenceWriter.cs
- BaseProcessor.cs
- UnmanagedMemoryStream.cs
- ImagingCache.cs
- MessageEncoderFactory.cs
- CommonGetThemePartSize.cs
- SoapClientMessage.cs
- AnimationClockResource.cs
- AutoResizedEvent.cs
- ProjectionCamera.cs
- ControlEvent.cs
- TaskExtensions.cs
- returneventsaver.cs
- GeneralTransform3DTo2D.cs
- ResourcesGenerator.cs
- HttpCookieCollection.cs
- CodeArgumentReferenceExpression.cs
- ReadOnlyCollectionBase.cs
- BamlStream.cs
- ChangePassword.cs
- ModulesEntry.cs
- DataGridHeaderBorder.cs
- ExpressionEditor.cs
- ToolBarButtonClickEvent.cs
- RelationshipFixer.cs
- ToolStripPanelRenderEventArgs.cs
- ISFClipboardData.cs
- SystemParameters.cs
- DecryptedHeader.cs
- HttpWrapper.cs
- ProcessingInstructionAction.cs
- KerberosTokenFactoryCredential.cs
- Literal.cs
- DefaultMemberAttribute.cs
- COM2ExtendedBrowsingHandler.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- FullTextBreakpoint.cs
- StreamSecurityUpgradeInitiatorBase.cs
- PropertyGridEditorPart.cs
- OleDbInfoMessageEvent.cs
- DropDownButton.cs
- GridSplitter.cs
- PinnedBufferMemoryStream.cs
- QueryableDataSourceView.cs
- TileModeValidation.cs
- SystemInformation.cs
- SizeChangedEventArgs.cs
- ConnectionOrientedTransportBindingElement.cs
- CLSCompliantAttribute.cs
- ContainerAction.cs
- MembershipPasswordException.cs
- BlurEffect.cs
- ParameterCollection.cs
- DrawListViewSubItemEventArgs.cs
- TemplateXamlParser.cs
- DataReaderContainer.cs
- XmlSerializationReader.cs
- IPHostEntry.cs
- SerialPort.cs
- SynchronizationContextHelper.cs
- _Win32.cs
- SymbolMethod.cs
- HttpHandlerActionCollection.cs
- TreeNodeConverter.cs
- LoggedException.cs
- LinkedResource.cs
- ParseChildrenAsPropertiesAttribute.cs
- BitmapFrame.cs
- ObservableDictionary.cs
- WindowsTitleBar.cs
- SweepDirectionValidation.cs
- SpAudioStreamWrapper.cs
- FigureParagraph.cs
- EventHandlerList.cs
- EventWaitHandleSecurity.cs
- ColorBlend.cs
- DashStyle.cs
- RefExpr.cs
- HybridDictionary.cs
- ImageSourceValueSerializer.cs
- _ContextAwareResult.cs
- CharAnimationUsingKeyFrames.cs