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
- SmtpNetworkElement.cs
- Quaternion.cs
- activationcontext.cs
- MasterPageParser.cs
- DBConnectionString.cs
- Package.cs
- XmlHierarchyData.cs
- QilTargetType.cs
- DataControlButton.cs
- TreeIterators.cs
- WebUtil.cs
- GiveFeedbackEventArgs.cs
- AttributeData.cs
- Reference.cs
- RelatedPropertyManager.cs
- CellLabel.cs
- PresentationTraceSources.cs
- AutoResizedEvent.cs
- ResourceDictionaryCollection.cs
- PolyQuadraticBezierSegment.cs
- OperationGenerator.cs
- DynamicDiscoveryDocument.cs
- FixedSOMTableRow.cs
- Pair.cs
- ToolStripDropDown.cs
- ToolBarButton.cs
- IPAddressCollection.cs
- FormViewModeEventArgs.cs
- ImportCatalogPart.cs
- CalendarAutoFormatDialog.cs
- PrtTicket_Public_Simple.cs
- TaiwanCalendar.cs
- WMICapabilities.cs
- ThicknessAnimationUsingKeyFrames.cs
- Color.cs
- WorkflowRuntimeServiceElement.cs
- EnumerableRowCollection.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- RoleManagerModule.cs
- DirtyTextRange.cs
- MediaElementAutomationPeer.cs
- EntitySetDataBindingList.cs
- _emptywebproxy.cs
- VideoDrawing.cs
- BaseTreeIterator.cs
- SqlTrackingQuery.cs
- TextTreeInsertElementUndoUnit.cs
- IdentityManager.cs
- PageCanvasSize.cs
- _DisconnectOverlappedAsyncResult.cs
- MethodCallConverter.cs
- MethodCallTranslator.cs
- NavigateEvent.cs
- WebPartCloseVerb.cs
- FileLogRecordHeader.cs
- TextEditorSelection.cs
- PointAnimationBase.cs
- StringResourceManager.cs
- PlatformCulture.cs
- SparseMemoryStream.cs
- ImpersonationContext.cs
- ButtonStandardAdapter.cs
- ActivityCodeDomSerializer.cs
- MonthCalendarDesigner.cs
- AlternateViewCollection.cs
- ConfigXmlCDataSection.cs
- DispatcherFrame.cs
- BitmapPalette.cs
- GridPattern.cs
- WebPartEditVerb.cs
- ByteStorage.cs
- BuildProviderUtils.cs
- DataServicePagingProviderWrapper.cs
- PresentationTraceSources.cs
- MemoryPressure.cs
- BoolExpressionVisitors.cs
- SQLBytesStorage.cs
- EntityDataSourceStatementEditor.cs
- FirewallWrapper.cs
- WindowsListView.cs
- StorageComplexPropertyMapping.cs
- ClientRuntimeConfig.cs
- Int32CollectionValueSerializer.cs
- WebPartVerbsEventArgs.cs
- WinCategoryAttribute.cs
- SystemWebCachingSectionGroup.cs
- SmtpClient.cs
- ThemeDictionaryExtension.cs
- OrderByQueryOptionExpression.cs
- StorageAssociationSetMapping.cs
- InternalConfigRoot.cs
- TypeTypeConverter.cs
- CodeTypeDelegate.cs
- DetailsViewRow.cs
- MediaCommands.cs
- SqlRecordBuffer.cs
- EpmCustomContentWriterNodeData.cs
- HwndStylusInputProvider.cs
- TypeUtil.cs
- TypeUsage.cs