//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner Microsoft // @backupOwner Microsoft //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; using System.Text; namespace System.Data.Metadata.Edm { /// /// Represents the edm member class /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public abstract class EdmMember : MetadataItem { /// /// Initializes a new instance of EdmMember class /// /// name of the member /// type information containing info about member's type and its facet internal EdmMember(string name, TypeUsage memberTypeUsage) { EntityUtil.CheckStringArgument(name, "name"); EntityUtil.GenericCheckArgumentNull(memberTypeUsage, "memberTypeUsage"); _name = name; _typeUsage = memberTypeUsage; } private TypeUsage _typeUsage; private string _name; private StructuralType _declaringType; /// /// Returns the identity of the member /// internal override string Identity { get { return this.Name; } } /// /// Returns the name of the member /// [MetadataProperty(PrimitiveTypeKind.String, false)] public String Name { get { return _name; } } /// /// Returns the declaring type of the member /// public StructuralType DeclaringType { get { return _declaringType; } } /// /// Returns the TypeUsage object containing the type information and facets /// about the type /// [MetadataProperty(BuiltInTypeKind.TypeUsage, false)] public TypeUsage TypeUsage { get { return _typeUsage; } } /// /// Overriding System.Object.ToString to provide better String representation /// for this type. /// public override string ToString() { return Name; } /// /// Sets the member to read only mode. Once this is done, there are no changes /// that can be done to this class /// internal override void SetReadOnly() { if (!IsReadOnly) { base.SetReadOnly(); // TypeUsage is always readonly, no need to set it } } /// /// Change the declaring type without doing fixup in the member collection /// internal void ChangeDeclaringTypeWithoutCollectionFixup(StructuralType newDeclaringType) { _declaringType = newDeclaringType; } /// /// Tells whether this member is marked as a Computed member in the EDM definition /// internal bool IsStoreGeneratedComputed { get { Facet item=null; if (TypeUsage.Facets.TryGetValue(EdmProviderManifest.StoreGeneratedPatternFacetName, false, out item)) { return ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed; } return false; } } /// /// Tells whether this member's Store generated pattern is marked as Identity in the EDM definition /// internal bool IsStoreGeneratedIdentity { get { Facet item = null; if (TypeUsage.Facets.TryGetValue(EdmProviderManifest.StoreGeneratedPatternFacetName, false, out item)) { return ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Identity; } return false; } } } }