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
- TransformerTypeCollection.cs
- WebPartTracker.cs
- WebException.cs
- XmlNotation.cs
- NavigationProperty.cs
- StandardTransformFactory.cs
- UnionExpr.cs
- BinaryFormatterWriter.cs
- TrackPointCollection.cs
- BrushConverter.cs
- GraphicsPathIterator.cs
- SqlParameter.cs
- SelectingProviderEventArgs.cs
- LinqDataSourceContextEventArgs.cs
- XamlGridLengthSerializer.cs
- DLinqAssociationProvider.cs
- HtmlInputControl.cs
- XmlQuerySequence.cs
- TemplateFactory.cs
- WindowsGraphicsWrapper.cs
- HtmlInputButton.cs
- StreamInfo.cs
- CodeIndexerExpression.cs
- TogglePattern.cs
- SendMailErrorEventArgs.cs
- MinimizableAttributeTypeConverter.cs
- Color.cs
- Converter.cs
- FilterableAttribute.cs
- VBIdentifierDesigner.xaml.cs
- BatchServiceHost.cs
- SafeNativeMethods.cs
- MultiBinding.cs
- Types.cs
- ChtmlPageAdapter.cs
- RecognizerStateChangedEventArgs.cs
- PreviewControlDesigner.cs
- TextSchema.cs
- TransformerTypeCollection.cs
- SplitterPanelDesigner.cs
- CaseInsensitiveComparer.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- EditorBrowsableAttribute.cs
- MultiDataTrigger.cs
- PngBitmapEncoder.cs
- HtmlForm.cs
- SystemPens.cs
- RangeEnumerable.cs
- HelpExampleGenerator.cs
- ToolboxService.cs
- SQLInt64Storage.cs
- CodeRemoveEventStatement.cs
- ConnectionPointCookie.cs
- CacheAxisQuery.cs
- XmlException.cs
- FocusManager.cs
- DynamicDiscoSearcher.cs
- ListDictionaryInternal.cs
- DataServiceCollectionOfT.cs
- PenThread.cs
- MappingException.cs
- PrintDialog.cs
- MILUtilities.cs
- ResourceDictionary.cs
- ExtendedPropertyDescriptor.cs
- FunctionImportMapping.cs
- AttachedPropertyBrowsableAttribute.cs
- InstallHelper.cs
- ImageDrawing.cs
- BamlBinaryReader.cs
- SingleAnimation.cs
- SpeechAudioFormatInfo.cs
- WebConfigurationManager.cs
- ArcSegment.cs
- ProviderManager.cs
- ChameleonKey.cs
- SymmetricAlgorithm.cs
- PackageDigitalSignature.cs
- ServiceEndpointCollection.cs
- PropertyChangeTracker.cs
- ConditionCollection.cs
- BuiltInExpr.cs
- DebuggerAttributes.cs
- RemoteWebConfigurationHostStream.cs
- SelectQueryOperator.cs
- WS2007HttpBinding.cs
- KeyValuePairs.cs
- VerificationException.cs
- EntityContainerAssociationSetEnd.cs
- AssemblyBuilder.cs
- ValidatorCompatibilityHelper.cs
- UIElement.cs
- ExternalException.cs
- TypeNameConverter.cs
- TakeQueryOptionExpression.cs
- GlyphShapingProperties.cs
- WebServiceClientProxyGenerator.cs
- SourceLocationProvider.cs
- __ComObject.cs
- EventLogPermissionHolder.cs