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
- MergePropertyDescriptor.cs
- NGCSerializer.cs
- TrackingParticipant.cs
- ClientRuntimeConfig.cs
- WebPartsPersonalization.cs
- FileRecordSequenceHelper.cs
- MenuItemStyleCollection.cs
- BaseCodePageEncoding.cs
- TextTrailingWordEllipsis.cs
- ErrorFormatterPage.cs
- TextMarkerSource.cs
- AdjustableArrowCap.cs
- GridPatternIdentifiers.cs
- XmlDataSourceNodeDescriptor.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- TraceUtility.cs
- ConfigXmlDocument.cs
- OperandQuery.cs
- UnauthorizedWebPart.cs
- EditingCoordinator.cs
- ReadOnlyPropertyMetadata.cs
- ApplicationHost.cs
- HwndKeyboardInputProvider.cs
- EventBindingService.cs
- SequentialWorkflowHeaderFooter.cs
- ComponentSerializationService.cs
- SoapHeader.cs
- DefaultTextStore.cs
- Point4D.cs
- DeploymentSectionCache.cs
- BulletedListEventArgs.cs
- TextEditorParagraphs.cs
- MetabaseReader.cs
- Glyph.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- MemberPath.cs
- PageStatePersister.cs
- ConfigXmlText.cs
- ViewLoader.cs
- typedescriptorpermissionattribute.cs
- EntityProviderFactory.cs
- FloatAverageAggregationOperator.cs
- ToolStripDropDown.cs
- HtmlImage.cs
- WpfKnownTypeInvoker.cs
- ResXBuildProvider.cs
- KoreanCalendar.cs
- ProtocolsConfigurationHandler.cs
- _FixedSizeReader.cs
- LayoutManager.cs
- Button.cs
- prompt.cs
- CredentialCache.cs
- AddInContractAttribute.cs
- LongValidator.cs
- FocusChangedEventArgs.cs
- VirtualPathUtility.cs
- RadioButtonFlatAdapter.cs
- StringFunctions.cs
- CellPartitioner.cs
- SpellerError.cs
- BindingsCollection.cs
- ListenerSingletonConnectionReader.cs
- IRCollection.cs
- PersonalizationStateQuery.cs
- TCPClient.cs
- ComponentManagerBroker.cs
- SafeNativeMethods.cs
- TextStore.cs
- DataRowExtensions.cs
- TypedCompletedAsyncResult.cs
- GeneratedContractType.cs
- SqlTypeConverter.cs
- ObjectHelper.cs
- VariantWrapper.cs
- Canvas.cs
- PrintDialog.cs
- PerspectiveCamera.cs
- DesignTimeValidationFeature.cs
- FieldBuilder.cs
- GeneralTransformCollection.cs
- EmptyReadOnlyDictionaryInternal.cs
- ObjectListGeneralPage.cs
- XmlReflectionMember.cs
- TemplatedWizardStep.cs
- TextEditorSelection.cs
- CheckBox.cs
- XmlDomTextWriter.cs
- TableRowCollection.cs
- XmlAttributeCache.cs
- RayHitTestParameters.cs
- Events.cs
- CodeRemoveEventStatement.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DocumentReferenceCollection.cs
- ListBox.cs
- CustomActivityDesigner.cs
- ServiceOperationListItem.cs
- CompositeControl.cs
- CommandID.cs