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
- DataGridViewCellValueEventArgs.cs
- MethodToken.cs
- FastPropertyAccessor.cs
- ToolStripPanelRow.cs
- SocketPermission.cs
- SecurityUtils.cs
- AssemblyNameProxy.cs
- GridItemPattern.cs
- ListViewPagedDataSource.cs
- FontDialog.cs
- StateDesigner.Helpers.cs
- LinkTarget.cs
- ParameterElement.cs
- SamlAdvice.cs
- dsa.cs
- WebEventTraceProvider.cs
- LambdaCompiler.Lambda.cs
- XmlSchemaSet.cs
- DataGridViewCellCancelEventArgs.cs
- ImageFormat.cs
- PropertyFilter.cs
- PropertyEmitter.cs
- TableCell.cs
- ApplicationCommands.cs
- EngineSite.cs
- _PooledStream.cs
- SessionStateSection.cs
- WebPartConnectionsCloseVerb.cs
- FilterException.cs
- SynchronizedDispatch.cs
- XmlComment.cs
- RangeValidator.cs
- SQLBytes.cs
- CodeDirectoryCompiler.cs
- WindowsStatusBar.cs
- ContentType.cs
- XamlStream.cs
- Pair.cs
- PathGradientBrush.cs
- ReferenceTypeElement.cs
- HtmlInputText.cs
- AutoGeneratedFieldProperties.cs
- BindingExpression.cs
- CollectionBase.cs
- Single.cs
- AnnotationAdorner.cs
- OutOfMemoryException.cs
- RectAnimationClockResource.cs
- SessionParameter.cs
- OrCondition.cs
- MsmqSecureHashAlgorithm.cs
- ConsoleTraceListener.cs
- WebSysDefaultValueAttribute.cs
- EventProviderWriter.cs
- ProviderCommandInfoUtils.cs
- WebPermission.cs
- DateTimeConstantAttribute.cs
- DataMemberConverter.cs
- BinaryWriter.cs
- GiveFeedbackEvent.cs
- DnsPermission.cs
- _LoggingObject.cs
- ToolStripDropDownButton.cs
- MouseDevice.cs
- DoubleConverter.cs
- QuaternionRotation3D.cs
- VectorAnimationBase.cs
- ProvidersHelper.cs
- ProviderCollection.cs
- UserControl.cs
- HtmlLink.cs
- ReferenceEqualityComparer.cs
- GeneralTransform3DGroup.cs
- TypeLoadException.cs
- HttpException.cs
- ItemCollectionEditor.cs
- ExpressionBindings.cs
- TriState.cs
- ExpressionParser.cs
- SafeNativeMethods.cs
- ProxyHwnd.cs
- RoleGroupCollection.cs
- TextDocumentView.cs
- Relationship.cs
- PropertyOrder.cs
- odbcmetadatafactory.cs
- FixedSOMLineCollection.cs
- MimeWriter.cs
- VisualStyleRenderer.cs
- BindingExpressionUncommonField.cs
- CodeTypeDelegate.cs
- CustomLineCap.cs
- UniqueIdentifierService.cs
- DataGrid.cs
- ValueQuery.cs
- SelectedGridItemChangedEvent.cs
- MexTcpBindingElement.cs
- RevocationPoint.cs
- WorkflowExecutor.cs
- UseLicense.cs