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
- DefaultSettingsSection.cs
- DataGridColumnEventArgs.cs
- RadioButton.cs
- FunctionNode.cs
- PersianCalendar.cs
- NotifyParentPropertyAttribute.cs
- CounterSampleCalculator.cs
- SimpleTextLine.cs
- PanningMessageFilter.cs
- GridViewCommandEventArgs.cs
- UpdateException.cs
- XmlReflectionMember.cs
- TraceSource.cs
- TabPage.cs
- ToolStripComboBox.cs
- DataServiceQueryException.cs
- NameValuePair.cs
- CodeSnippetStatement.cs
- CodeSnippetCompileUnit.cs
- TemplateXamlTreeBuilder.cs
- FlowDocument.cs
- Typography.cs
- documentsequencetextcontainer.cs
- StrokeNodeOperations2.cs
- DisplayMemberTemplateSelector.cs
- TemplateField.cs
- ExecutionEngineException.cs
- GeometryCombineModeValidation.cs
- DbException.cs
- TdsEnums.cs
- QueryInterceptorAttribute.cs
- PersonalizationProvider.cs
- TextEmbeddedObject.cs
- HandleCollector.cs
- AsyncPostBackErrorEventArgs.cs
- PeerValidationBehavior.cs
- ObjectStateManager.cs
- ConfigPathUtility.cs
- Int32CAMarshaler.cs
- String.cs
- DataGridViewColumnCollection.cs
- HttpCookie.cs
- ReadOnlyDataSource.cs
- DataViewSetting.cs
- FileRecordSequence.cs
- safelink.cs
- TraceSection.cs
- Screen.cs
- DynamicVirtualDiscoSearcher.cs
- DataGridItemEventArgs.cs
- ExtendedTransformFactory.cs
- PlatformNotSupportedException.cs
- TagElement.cs
- Stack.cs
- SmiRecordBuffer.cs
- XamlTemplateSerializer.cs
- storagemappingitemcollection.viewdictionary.cs
- BrowsableAttribute.cs
- AnimationClock.cs
- ContentElement.cs
- Bezier.cs
- HtmlTableCellCollection.cs
- CodeMemberEvent.cs
- PropertyKey.cs
- FocusManager.cs
- GeometryConverter.cs
- RangeValidator.cs
- XmlTextReaderImplHelpers.cs
- DetailsViewUpdatedEventArgs.cs
- MetafileEditor.cs
- EmbeddedObject.cs
- XpsResourcePolicy.cs
- TableCell.cs
- EntityContainerEmitter.cs
- ItemsPresenter.cs
- XamlReaderHelper.cs
- AppDomainShutdownMonitor.cs
- BitFlagsGenerator.cs
- ClientCultureInfo.cs
- SinglePhaseEnlistment.cs
- XmlSerializableServices.cs
- PageSetupDialog.cs
- WeakReferenceList.cs
- DataControlImageButton.cs
- GridView.cs
- Tool.cs
- EditorPartCollection.cs
- LogWriteRestartAreaAsyncResult.cs
- HashSet.cs
- _Connection.cs
- CachedPathData.cs
- GAC.cs
- WindowsSpinner.cs
- MergeEnumerator.cs
- LinkLabelLinkClickedEvent.cs
- CellPartitioner.cs
- ExternalException.cs
- InputProcessorProfilesLoader.cs
- Metadata.cs
- DropShadowEffect.cs