Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / NavigationProperty.cs / 1305376 / NavigationProperty.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; using System.Threading; using System.Linq; namespace System.Data.Metadata.Edm { ////// Represent the edm navigation property class /// public sealed class NavigationProperty : EdmMember { #region Constructors ////// Initializes a new instance of the navigation property class /// /// name of the navigation property /// TypeUsage object containing the navigation property type and its facets ///Thrown if name or typeUsage arguments are null ///Thrown if name argument is empty string internal NavigationProperty(string name, TypeUsage typeUsage) : base(name, typeUsage) { EntityUtil.CheckStringArgument(name, "name"); EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage"); _accessor = new NavigationPropertyAccessor(name); } ////// Initializes a new OSpace instance of the property class /// /// name of the property /// TypeUsage object containing the property type and its facets /// for the property internal NavigationProperty(string name, TypeUsage typeUsage, System.Reflection.PropertyInfo propertyInfo) : this(name, typeUsage) { System.Diagnostics.Debug.Assert(name == propertyInfo.Name, "different PropertyName?"); if (null != propertyInfo) { System.Reflection.MethodInfo method; method = propertyInfo.GetGetMethod(); PropertyGetterHandle = ((null != method) ? method.MethodHandle : default(System.RuntimeMethodHandle)); } } #endregion ////// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.NavigationProperty; } } #region Fields internal const string RelationshipTypeNamePropertyName = "RelationshipType"; internal const string ToEndMemberNamePropertyName = "ToEndMember"; private RelationshipType _relationshipType; private RelationshipEndMember _toEndMember; private RelationshipEndMember _fromEndMember; ///Store the handle, allowing the PropertyInfo/MethodInfo/Type references to be GC'd internal readonly System.RuntimeMethodHandle PropertyGetterHandle; ///cached dynamic methods to access the property values from a CLR instance private readonly NavigationPropertyAccessor _accessor; #endregion ////// Gets/Sets the relationship type that this navigation property operates on /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipType, false)] public RelationshipType RelationshipType { get { return _relationshipType; } internal set { _relationshipType = value; } } ////// Gets/Sets the to relationship end member in the navigation /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipEndMember, false)] public RelationshipEndMember ToEndMember { get { return _toEndMember; } internal set { _toEndMember = value; } } ////// Gets/Sets the from relationship end member in the navigation /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipEndMember, false)] public RelationshipEndMember FromEndMember { get { return _fromEndMember; } internal set { _fromEndMember = value; } } internal NavigationPropertyAccessor Accessor { get { return _accessor; } } ////// Where the given navigation property is on the dependent end of a referential constraint, /// returns the foreign key properties. Otherwise, returns an empty set. We will return the members in the order /// of the principal end key properties. /// ///Foreign key properties public IEnumerableGetDependentProperties() { // Get the declared type AssociationType associationType = (AssociationType)this.RelationshipType; Debug.Assert( associationType.ReferentialConstraints != null, "ReferenceConstraints cannot be null"); if (associationType.ReferentialConstraints.Count > 0) { ReferentialConstraint rc = associationType.ReferentialConstraints[0]; RelationshipEndMember dependentEndMember = rc.ToRole; if (dependentEndMember.EdmEquals(this.FromEndMember)) { //Order the dependant properties in the order of principal end's key members. var keyMembers = rc.FromRole.GetEntityType().KeyMembers; var dependantProperties = new List (keyMembers.Count); for (int i = 0; i < keyMembers.Count; i++) { dependantProperties.Add(rc.ToProperties[rc.FromProperties.IndexOf(((EdmProperty)keyMembers[i]))]); } return dependantProperties.AsReadOnly(); } } return Enumerable.Empty (); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; using System.Threading; using System.Linq; namespace System.Data.Metadata.Edm { ////// Represent the edm navigation property class /// public sealed class NavigationProperty : EdmMember { #region Constructors ////// Initializes a new instance of the navigation property class /// /// name of the navigation property /// TypeUsage object containing the navigation property type and its facets ///Thrown if name or typeUsage arguments are null ///Thrown if name argument is empty string internal NavigationProperty(string name, TypeUsage typeUsage) : base(name, typeUsage) { EntityUtil.CheckStringArgument(name, "name"); EntityUtil.GenericCheckArgumentNull(typeUsage, "typeUsage"); _accessor = new NavigationPropertyAccessor(name); } ////// Initializes a new OSpace instance of the property class /// /// name of the property /// TypeUsage object containing the property type and its facets /// for the property internal NavigationProperty(string name, TypeUsage typeUsage, System.Reflection.PropertyInfo propertyInfo) : this(name, typeUsage) { System.Diagnostics.Debug.Assert(name == propertyInfo.Name, "different PropertyName?"); if (null != propertyInfo) { System.Reflection.MethodInfo method; method = propertyInfo.GetGetMethod(); PropertyGetterHandle = ((null != method) ? method.MethodHandle : default(System.RuntimeMethodHandle)); } } #endregion ////// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.NavigationProperty; } } #region Fields internal const string RelationshipTypeNamePropertyName = "RelationshipType"; internal const string ToEndMemberNamePropertyName = "ToEndMember"; private RelationshipType _relationshipType; private RelationshipEndMember _toEndMember; private RelationshipEndMember _fromEndMember; ///Store the handle, allowing the PropertyInfo/MethodInfo/Type references to be GC'd internal readonly System.RuntimeMethodHandle PropertyGetterHandle; ///cached dynamic methods to access the property values from a CLR instance private readonly NavigationPropertyAccessor _accessor; #endregion ////// Gets/Sets the relationship type that this navigation property operates on /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipType, false)] public RelationshipType RelationshipType { get { return _relationshipType; } internal set { _relationshipType = value; } } ////// Gets/Sets the to relationship end member in the navigation /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipEndMember, false)] public RelationshipEndMember ToEndMember { get { return _toEndMember; } internal set { _toEndMember = value; } } ////// Gets/Sets the from relationship end member in the navigation /// ///Thrown if the NavigationProperty instance is in ReadOnly state [MetadataProperty(BuiltInTypeKind.RelationshipEndMember, false)] public RelationshipEndMember FromEndMember { get { return _fromEndMember; } internal set { _fromEndMember = value; } } internal NavigationPropertyAccessor Accessor { get { return _accessor; } } ////// Where the given navigation property is on the dependent end of a referential constraint, /// returns the foreign key properties. Otherwise, returns an empty set. We will return the members in the order /// of the principal end key properties. /// ///Foreign key properties public IEnumerableGetDependentProperties() { // Get the declared type AssociationType associationType = (AssociationType)this.RelationshipType; Debug.Assert( associationType.ReferentialConstraints != null, "ReferenceConstraints cannot be null"); if (associationType.ReferentialConstraints.Count > 0) { ReferentialConstraint rc = associationType.ReferentialConstraints[0]; RelationshipEndMember dependentEndMember = rc.ToRole; if (dependentEndMember.EdmEquals(this.FromEndMember)) { //Order the dependant properties in the order of principal end's key members. var keyMembers = rc.FromRole.GetEntityType().KeyMembers; var dependantProperties = new List (keyMembers.Count); for (int i = 0; i < keyMembers.Count; i++) { dependantProperties.Add(rc.ToProperties[rc.FromProperties.IndexOf(((EdmProperty)keyMembers[i]))]); } return dependantProperties.AsReadOnly(); } } return Enumerable.Empty (); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FunctionImportElement.cs
- FontConverter.cs
- BoundPropertyEntry.cs
- SqlServer2KCompatibilityAnnotation.cs
- SqlFileStream.cs
- ReflectTypeDescriptionProvider.cs
- EditCommandColumn.cs
- ParentControlDesigner.cs
- XmlDownloadManager.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- MimeMultiPart.cs
- SafeProcessHandle.cs
- InvalidFilterCriteriaException.cs
- datacache.cs
- QueryCacheEntry.cs
- ScaleTransform.cs
- EntityDataSourceWizardForm.cs
- TableChangeProcessor.cs
- ThreadInterruptedException.cs
- X500Name.cs
- NegotiateStream.cs
- _Win32.cs
- WebEventTraceProvider.cs
- ObjectDataSource.cs
- RecognizedPhrase.cs
- DesignerCategoryAttribute.cs
- NetDispatcherFaultException.cs
- LowerCaseStringConverter.cs
- Config.cs
- DecimalStorage.cs
- WindowsIdentity.cs
- WindowsRebar.cs
- ObjectAnimationBase.cs
- RowToFieldTransformer.cs
- UriTemplateMatchException.cs
- ValueChangedEventManager.cs
- UniqueID.cs
- DataSourceGeneratorException.cs
- UrlAuthFailedErrorFormatter.cs
- FeatureSupport.cs
- MailSettingsSection.cs
- ParentControlDesigner.cs
- FlowPanelDesigner.cs
- OrderPreservingPipeliningMergeHelper.cs
- SqlProfileProvider.cs
- DataGridColumn.cs
- PropertyIdentifier.cs
- UnauthorizedWebPart.cs
- TableLayoutPanel.cs
- WebPartDisplayModeCancelEventArgs.cs
- ResourceExpressionBuilder.cs
- DataGridGeneralPage.cs
- AutomationEventArgs.cs
- Variant.cs
- ControlAdapter.cs
- DBConnectionString.cs
- QueryStringParameter.cs
- GridViewEditEventArgs.cs
- Point3DAnimationBase.cs
- PropertyEmitter.cs
- ResourceDictionary.cs
- ColumnMapVisitor.cs
- TransactionValidationBehavior.cs
- HttpMethodConstraint.cs
- BufferedOutputStream.cs
- XPathDocumentNavigator.cs
- DeclaredTypeValidator.cs
- Soap.cs
- NullableLongSumAggregationOperator.cs
- FixUpCollection.cs
- SafeThemeHandle.cs
- HtmlImageAdapter.cs
- LinearGradientBrush.cs
- X509Certificate2.cs
- AutomationPropertyInfo.cs
- RegexRunner.cs
- StorageComplexPropertyMapping.cs
- QuaternionIndependentAnimationStorage.cs
- VirtualizingPanel.cs
- StyleCollectionEditor.cs
- InstanceValue.cs
- StringResourceManager.cs
- EventSetter.cs
- TextServicesDisplayAttributePropertyRanges.cs
- NotImplementedException.cs
- FormatVersion.cs
- TextTreeDeleteContentUndoUnit.cs
- Link.cs
- NativeCppClassAttribute.cs
- StringArrayEditor.cs
- TileBrush.cs
- DateTimeFormat.cs
- ImageAttributes.cs
- ToolStripOverflowButton.cs
- UTF32Encoding.cs
- CoTaskMemSafeHandle.cs
- SecurityManager.cs
- Error.cs
- PathGradientBrush.cs
- InstanceDataCollectionCollection.cs