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
- COM2FontConverter.cs
- _NativeSSPI.cs
- CommandDevice.cs
- TypeSystem.cs
- EventMap.cs
- WSHttpBinding.cs
- PixelFormat.cs
- NumberSubstitution.cs
- VisualBrush.cs
- Popup.cs
- NetNamedPipeSecurity.cs
- EventlogProvider.cs
- DataPagerCommandEventArgs.cs
- ScriptControlDescriptor.cs
- ObjectTokenCategory.cs
- XmlWhitespace.cs
- CodeCatchClauseCollection.cs
- DispatchChannelSink.cs
- ToolStripComboBox.cs
- ListBoxAutomationPeer.cs
- SchemaImporterExtension.cs
- JournalNavigationScope.cs
- InkCanvasAutomationPeer.cs
- ComplexTypeEmitter.cs
- XmlAtomErrorReader.cs
- LeaseManager.cs
- XmlSchemaIdentityConstraint.cs
- EdmProviderManifest.cs
- MdiWindowListStrip.cs
- PageParser.cs
- FindCriteriaApril2005.cs
- FusionWrap.cs
- TextOnlyOutput.cs
- TabItemWrapperAutomationPeer.cs
- PageBreakRecord.cs
- InputLanguageEventArgs.cs
- NameValuePair.cs
- TabOrder.cs
- X509CertificateCollection.cs
- ValidationHelpers.cs
- ExpandedWrapper.cs
- HealthMonitoringSectionHelper.cs
- ProvidersHelper.cs
- DynamicMethod.cs
- DesignRelation.cs
- XmlUtil.cs
- SafeThemeHandle.cs
- Keywords.cs
- PKCS1MaskGenerationMethod.cs
- CheckBoxField.cs
- OdbcConnectionPoolProviderInfo.cs
- AsyncContentLoadedEventArgs.cs
- WebBaseEventKeyComparer.cs
- PreservationFileReader.cs
- ExecutionScope.cs
- SystemNetHelpers.cs
- SessionEndingCancelEventArgs.cs
- MarkupWriter.cs
- StartFileNameEditor.cs
- AuthenticationService.cs
- _NegoStream.cs
- MDIControlStrip.cs
- Subordinate.cs
- xsdvalidator.cs
- FragmentQueryKB.cs
- ISFTagAndGuidCache.cs
- SqlGenerator.cs
- BasicHttpBindingElement.cs
- OperationResponse.cs
- NeedSkipTokenVisitor.cs
- validationstate.cs
- PanelContainerDesigner.cs
- SamlAuthenticationClaimResource.cs
- Polyline.cs
- columnmapfactory.cs
- ControlBuilder.cs
- XamlTemplateSerializer.cs
- NGCSerializationManager.cs
- TemplateLookupAction.cs
- CompressionTransform.cs
- NavigationFailedEventArgs.cs
- BitmapPalette.cs
- CryptographicAttribute.cs
- QilTargetType.cs
- EditorOptionAttribute.cs
- ArraySegment.cs
- AdCreatedEventArgs.cs
- GeometryConverter.cs
- SqlReorderer.cs
- RawTextInputReport.cs
- BamlResourceDeserializer.cs
- FormViewPagerRow.cs
- LogWriteRestartAreaState.cs
- COSERVERINFO.cs
- HttpApplication.cs
- XmlNodeChangedEventManager.cs
- NetWebProxyFinder.cs
- SourceElementsCollection.cs
- BaseAutoFormat.cs
- XmlAnyElementAttribute.cs