Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / MetadataItem_Static.cs / 1305376 / MetadataItem_Static.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Data.Common; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Text; using System.Xml.Serialization; using System.Xml.Schema; using System.Xml; namespace System.Data.Metadata.Edm { ////// Represents the base item class for all the metadata /// public abstract partial class MetadataItem { #region Constructors ////// Static Constructor which initializes all the built in types and primitive types /// static MetadataItem() { //////////////////////////////////////////////////////////////////////////////////////////////// // Bootstrapping the builtin types //////////////////////////////////////////////////////////////////////////////////////////////// _builtInTypes[(int)BuiltInTypeKind.AssociationEndMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationSet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationSetEnd] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.CollectionKind] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.CollectionType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ComplexType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.Documentation] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.OperationAction] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.EdmType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityContainer] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntitySet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntitySetBase] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityTypeBase] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EnumType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EnumMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.Facet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EdmFunction] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.FunctionParameter] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.GlobalItem] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.MetadataProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.NavigationProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.MetadataItem] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EdmMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ParameterMode] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.PrimitiveType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.PrimitiveTypeKind] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.EdmProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ProviderManifest] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ReferentialConstraint] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RefType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipEndMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipMultiplicity] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipSet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RowType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.SimpleType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.StructuralType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.TypeUsage] = new ComplexType(); //////////////////////////////////////////////////////////////////////////////////////////////// // Initialize item attributes for all the built-in complex types //////////////////////////////////////////////////////////////////////////////////////////////// InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem), EdmConstants.ItemType, false /*isAbstract*/, null); // populate the attributes for item attributes InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataProperty), EdmConstants.ItemAttribute, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem), EdmConstants.GlobalItem, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.TypeUsage), EdmConstants.TypeUsage, false, /*isAbstract*/ (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); //populate the attributes for the edm type InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType), EdmConstants.EdmType, true, /*isAbstract*/ (ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType), EdmConstants.SimpleType, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EnumType), EdmConstants.EnumerationType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.PrimitiveType), EdmConstants.PrimitiveType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.CollectionType), EdmConstants.CollectionType, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RefType), EdmConstants.RefType, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember), EdmConstants.Member, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmProperty), EdmConstants.Property, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.NavigationProperty), EdmConstants.NavigationProperty, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ProviderManifest), EdmConstants.ProviderManifest, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipEndMember), EdmConstants.RelationshipEnd, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationEndMember), EdmConstants.AssociationEnd, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipEndMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EnumMember), EdmConstants.EnumerationMember, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ReferentialConstraint), EdmConstants.ReferentialConstraint, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); // Structural Type hierarchy InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType), EdmConstants.StructuralType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RowType), EdmConstants.RowType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ComplexType), EdmConstants.ComplexType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase), EdmConstants.ElementType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityType), EdmConstants.EntityType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipType), EdmConstants.RelationshipType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationType), EdmConstants.AssociationType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.Facet), EdmConstants.Facet, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityContainer), EdmConstants.EntityContainerType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase), EdmConstants.BaseEntitySetType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySet), EdmConstants.EntitySetType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipSet), EdmConstants.RelationshipSet, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationSet), EdmConstants.AssociationSetType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipSet)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationSetEnd), EdmConstants.AssociationSetEndType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.FunctionParameter), EdmConstants.FunctionParameter, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmFunction), EdmConstants.Function, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.Documentation), EdmConstants.Documentation, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); //////////////////////////////////////////////////////////////////////////////////////////////// // Initialize item attributes for all the built-in enum types //////////////////////////////////////////////////////////////////////////////////////////////// InitializeEnumType(BuiltInTypeKind.OperationAction, EdmConstants.DeleteAction, new string[] { EdmConstants.None, EdmConstants.Cascade, EdmConstants.Restrict }); InitializeEnumType(BuiltInTypeKind.RelationshipMultiplicity, EdmConstants.RelationshipMultiplicity, new string[] { EdmConstants.One, EdmConstants.ZeroToOne, EdmConstants.Many }); InitializeEnumType(BuiltInTypeKind.ParameterMode, EdmConstants.ParameterMode, new string[] { EdmConstants.In, EdmConstants.Out, EdmConstants.InOut }); InitializeEnumType(BuiltInTypeKind.CollectionKind, EdmConstants.CollectionKind, new string[] { EdmConstants.NoneCollectionKind, EdmConstants.ListCollectionKind, EdmConstants.BagCollectionKind }); InitializeEnumType(BuiltInTypeKind.PrimitiveTypeKind, EdmConstants.PrimitiveTypeKind, Enum.GetNames(typeof(PrimitiveTypeKind))); //////////////////////////////////////////////////////////////////////////////////////////////// // Bootstrapping the general facet descriptions //////////////////////////////////////////////////////////////////////////////////////////////// // Other type non-specific facets FacetDescription[] generalFacetDescriptions = new FacetDescription[2]; _nullableFacetDescription = new FacetDescription(DbProviderManifest.NullableFacetName, EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.Boolean), null, null, true); generalFacetDescriptions[0] = (_nullableFacetDescription); _defaultValueFacetDescription = new FacetDescription(DbProviderManifest.DefaultValueFacetName, MetadataItem.GetBuiltInType(BuiltInTypeKind.EdmType), null, null, null); generalFacetDescriptions[1] = (_defaultValueFacetDescription); _generalFacetDescriptions = Array.AsReadOnly(generalFacetDescriptions); _collectionKindFacetDescription = new FacetDescription(XmlConstants.CollectionKind, MetadataItem.GetBuiltInType(BuiltInTypeKind.EnumType), null, null, null); //////////////////////////////////////////////////////////////////////////////////////////////// // Add properties for the built-in complex types //////////////////////////////////////////////////////////////////////////////////////////////// TypeUsage stringTypeUsage = TypeUsage.Create(EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.String)); TypeUsage booleanTypeUsage = TypeUsage.Create(EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.Boolean)); TypeUsage edmTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.EdmType)); TypeUsage typeUsageTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.TypeUsage)); TypeUsage complexTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.ComplexType)); // populate the attributes for item attributes AddBuiltInTypeProperties(BuiltInTypeKind.MetadataProperty, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.TypeUsage, typeUsageTypeUsage), new EdmProperty(EdmConstants.Value, complexTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.MetadataItem, new EdmProperty[] { new EdmProperty(EdmConstants.ItemAttributes, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.MetadataProperty).GetCollectionType())), new EdmProperty(EdmConstants.Documentation, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.Documentation))) }); AddBuiltInTypeProperties(BuiltInTypeKind.TypeUsage, new EdmProperty[] { new EdmProperty(EdmConstants.EdmType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmType))), new EdmProperty(EdmConstants.Facets, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.Facet)))}); //populate the attributes for the edm type AddBuiltInTypeProperties(BuiltInTypeKind.EdmType, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Namespace, stringTypeUsage), new EdmProperty(EdmConstants.Abstract, booleanTypeUsage), new EdmProperty(EdmConstants.Sealed, booleanTypeUsage), new EdmProperty(EdmConstants.BaseType, complexTypeUsage) } ); AddBuiltInTypeProperties(BuiltInTypeKind.EnumType, new EdmProperty[] { new EdmProperty(EdmConstants.EnumMembers, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.CollectionType, new EdmProperty[] { new EdmProperty(EdmConstants.TypeUsage, typeUsageTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.RefType, new EdmProperty[] { new EdmProperty(EdmConstants.EntityType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntityType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmMember, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.TypeUsage, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.TypeUsage))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmProperty, new EdmProperty[] { new EdmProperty(EdmConstants.Nullable, stringTypeUsage), new EdmProperty(EdmConstants.DefaultValue, complexTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.NavigationProperty, new EdmProperty[] { new EdmProperty(EdmConstants.RelationshipTypeName, stringTypeUsage), new EdmProperty(EdmConstants.ToEndMemberName, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.RelationshipEndMember, new EdmProperty[] { new EdmProperty(EdmConstants.OperationBehaviors, complexTypeUsage), new EdmProperty(EdmConstants.RelationshipMultiplicity, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EnumType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EnumMember, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.ReferentialConstraint, new EdmProperty[] { new EdmProperty(EdmConstants.ToRole, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.RelationshipEndMember))), new EdmProperty(EdmConstants.FromRole, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.RelationshipEndMember))), new EdmProperty(EdmConstants.ToProperties, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmProperty).GetCollectionType())), new EdmProperty(EdmConstants.FromProperties, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmProperty).GetCollectionType())) } ); // Structural Type hierarchy AddBuiltInTypeProperties(BuiltInTypeKind.StructuralType, new EdmProperty[] { new EdmProperty(EdmConstants.Members, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmMember))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntityTypeBase, new EdmProperty[] { new EdmProperty(EdmConstants.KeyMembers, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmMember))) }); AddBuiltInTypeProperties(BuiltInTypeKind.Facet, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EdmType, edmTypeUsage), new EdmProperty(EdmConstants.Value, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntityContainer, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EntitySets, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntitySet))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntitySetBase, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EntityType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntityType))), new EdmProperty(EdmConstants.Schema, stringTypeUsage), new EdmProperty(EdmConstants.Table, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.AssociationSet, new EdmProperty[] { new EdmProperty(EdmConstants.AssociationSetEnds, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.AssociationSetEnd).GetCollectionType()))}); AddBuiltInTypeProperties(BuiltInTypeKind.AssociationSetEnd, new EdmProperty[] { new EdmProperty(EdmConstants.Role, stringTypeUsage), new EdmProperty(EdmConstants.EntitySetType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntitySet))) } ); AddBuiltInTypeProperties(BuiltInTypeKind.FunctionParameter, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Mode, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EnumType))), new EdmProperty(EdmConstants.TypeUsage, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.TypeUsage))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmFunction, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Namespace, stringTypeUsage), new EdmProperty(EdmConstants.ReturnParameter, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.FunctionParameter))), new EdmProperty(EdmConstants.Parameters, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.FunctionParameter).GetCollectionType())) }); AddBuiltInTypeProperties(BuiltInTypeKind.Documentation, new EdmProperty[] { new EdmProperty(EdmConstants.Summary, stringTypeUsage), new EdmProperty(EdmConstants.LongDescription, stringTypeUsage) }); // Set all types to be readonly, used SetReadOnly to skip validation method to for (int i = 0; i < _builtInTypes.Length; i++) { _builtInTypes[i].SetReadOnly(); } InitializeNullTypeUsage(); } #endregion #region Fields private static EdmType[] _builtInTypes = new EdmType[EdmConstants.NumBuiltInTypes]; private static readonly System.Collections.ObjectModel.ReadOnlyCollection_generalFacetDescriptions; private static TypeUsage _nullTypeUsage; private static FacetDescription _nullableFacetDescription; private static FacetDescription _defaultValueFacetDescription; private static FacetDescription _collectionKindFacetDescription; #endregion #region Properties internal static FacetDescription DefaultValueFacetDescription { get { return _defaultValueFacetDescription; } } internal static FacetDescription CollectionKindFacetDescription { get { return _collectionKindFacetDescription; } } internal static FacetDescription NullableFacetDescription { get { return _nullableFacetDescription; } } internal static EdmProviderManifest EdmProviderManifest { get { return EdmProviderManifest.Instance; } } /// /// returns Null TypeUsage /// internal static TypeUsage NullType { get { return _nullTypeUsage; } } #endregion #region Methods ////// Returns the list of EDM builtin types /// public static EdmType GetBuiltInType(BuiltInTypeKind builtInTypeKind) { return _builtInTypes[(int)builtInTypeKind]; } ////// Returns the list of facet descriptions for a given type /// public static System.Collections.ObjectModel.ReadOnlyCollectionGetGeneralFacetDescriptions() { return _generalFacetDescriptions; } /// /// Initialize all the build in type with the given type attributes and properties /// /// The built In type which is getting initialized /// name of the built in type /// whether the type is abstract or not /// whether the type is sealed or not /// The base type of the built in type private static void InitializeBuiltInTypes(ComplexType builtInType, string name, bool isAbstract, ComplexType baseType) { // Initialize item attributes for all ancestor types EdmType.Initialize(builtInType, name, EdmConstants.EdmNamespace, DataSpace.CSpace, isAbstract, baseType); } ////// Add properties for all the build in complex type /// /// The type of the built In type whose properties are being added /// properties of the built in type private static void AddBuiltInTypeProperties(BuiltInTypeKind builtInTypeKind, EdmProperty[] properties) { ComplexType complexType = (ComplexType)GetBuiltInType(builtInTypeKind); if (properties != null) { for (int i = 0; i < properties.Length; i++) { complexType.AddMember(properties[i]); } } } ////// Initializes the enum type /// /// The built-in type kind enum value of this enum type /// The name of this enum type /// The member names of this enum type private static void InitializeEnumType(BuiltInTypeKind builtInTypeKind, string name, string[] enumMemberNames) { EnumType enumType = (EnumType)GetBuiltInType(builtInTypeKind); // Initialize item attributes for all ancestor types EdmType.Initialize(enumType, name, EdmConstants.EdmNamespace, DataSpace.CSpace, false, null); for (int i = 0; i < enumMemberNames.Length; i++) { enumType.AddMember(new EnumMember(enumMemberNames[i])); } } private static void InitializeNullTypeUsage() { ComplexType complexType = new ComplexType("NullType", String.Empty, DataSpace.CSpace); complexType.Abstract = true; _nullTypeUsage = TypeUsage.Create(complexType); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Data.Common; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Text; using System.Xml.Serialization; using System.Xml.Schema; using System.Xml; namespace System.Data.Metadata.Edm { ////// Represents the base item class for all the metadata /// public abstract partial class MetadataItem { #region Constructors ////// Static Constructor which initializes all the built in types and primitive types /// static MetadataItem() { //////////////////////////////////////////////////////////////////////////////////////////////// // Bootstrapping the builtin types //////////////////////////////////////////////////////////////////////////////////////////////// _builtInTypes[(int)BuiltInTypeKind.AssociationEndMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationSet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationSetEnd] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.AssociationType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.CollectionKind] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.CollectionType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ComplexType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.Documentation] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.OperationAction] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.EdmType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityContainer] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntitySet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntitySetBase] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EntityTypeBase] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EnumType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EnumMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.Facet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EdmFunction] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.FunctionParameter] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.GlobalItem] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.MetadataProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.NavigationProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.MetadataItem] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.EdmMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ParameterMode] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.PrimitiveType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.PrimitiveTypeKind] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.EdmProperty] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ProviderManifest] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.ReferentialConstraint] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RefType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipEndMember] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipMultiplicity] = new EnumType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipSet] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RelationshipType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.RowType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.SimpleType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.StructuralType] = new ComplexType(); _builtInTypes[(int)BuiltInTypeKind.TypeUsage] = new ComplexType(); //////////////////////////////////////////////////////////////////////////////////////////////// // Initialize item attributes for all the built-in complex types //////////////////////////////////////////////////////////////////////////////////////////////// InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem), EdmConstants.ItemType, false /*isAbstract*/, null); // populate the attributes for item attributes InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataProperty), EdmConstants.ItemAttribute, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem), EdmConstants.GlobalItem, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.TypeUsage), EdmConstants.TypeUsage, false, /*isAbstract*/ (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); //populate the attributes for the edm type InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType), EdmConstants.EdmType, true, /*isAbstract*/ (ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType), EdmConstants.SimpleType, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EnumType), EdmConstants.EnumerationType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.PrimitiveType), EdmConstants.PrimitiveType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.SimpleType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.CollectionType), EdmConstants.CollectionType, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RefType), EdmConstants.RefType, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember), EdmConstants.Member, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmProperty), EdmConstants.Property, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.NavigationProperty), EdmConstants.NavigationProperty, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ProviderManifest), EdmConstants.ProviderManifest, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipEndMember), EdmConstants.RelationshipEnd, true /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationEndMember), EdmConstants.AssociationEnd, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipEndMember)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EnumMember), EdmConstants.EnumerationMember, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ReferentialConstraint), EdmConstants.ReferentialConstraint, false /*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); // Structural Type hierarchy InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType), EdmConstants.StructuralType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RowType), EdmConstants.RowType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.ComplexType), EdmConstants.ComplexType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase), EdmConstants.ElementType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.StructuralType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityType), EdmConstants.EntityType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipType), EdmConstants.RelationshipType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntityTypeBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationType), EdmConstants.AssociationType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.Facet), EdmConstants.Facet, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntityContainer), EdmConstants.EntityContainerType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.GlobalItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase), EdmConstants.BaseEntitySetType, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySet), EdmConstants.EntitySetType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipSet), EdmConstants.RelationshipSet, true/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EntitySetBase)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationSet), EdmConstants.AssociationSetType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.RelationshipSet)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.AssociationSetEnd), EdmConstants.AssociationSetEndType, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.FunctionParameter), EdmConstants.FunctionParameter, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.EdmFunction), EdmConstants.Function, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.EdmType)); InitializeBuiltInTypes((ComplexType)GetBuiltInType(BuiltInTypeKind.Documentation), EdmConstants.Documentation, false/*isAbstract*/, (ComplexType)GetBuiltInType(BuiltInTypeKind.MetadataItem)); //////////////////////////////////////////////////////////////////////////////////////////////// // Initialize item attributes for all the built-in enum types //////////////////////////////////////////////////////////////////////////////////////////////// InitializeEnumType(BuiltInTypeKind.OperationAction, EdmConstants.DeleteAction, new string[] { EdmConstants.None, EdmConstants.Cascade, EdmConstants.Restrict }); InitializeEnumType(BuiltInTypeKind.RelationshipMultiplicity, EdmConstants.RelationshipMultiplicity, new string[] { EdmConstants.One, EdmConstants.ZeroToOne, EdmConstants.Many }); InitializeEnumType(BuiltInTypeKind.ParameterMode, EdmConstants.ParameterMode, new string[] { EdmConstants.In, EdmConstants.Out, EdmConstants.InOut }); InitializeEnumType(BuiltInTypeKind.CollectionKind, EdmConstants.CollectionKind, new string[] { EdmConstants.NoneCollectionKind, EdmConstants.ListCollectionKind, EdmConstants.BagCollectionKind }); InitializeEnumType(BuiltInTypeKind.PrimitiveTypeKind, EdmConstants.PrimitiveTypeKind, Enum.GetNames(typeof(PrimitiveTypeKind))); //////////////////////////////////////////////////////////////////////////////////////////////// // Bootstrapping the general facet descriptions //////////////////////////////////////////////////////////////////////////////////////////////// // Other type non-specific facets FacetDescription[] generalFacetDescriptions = new FacetDescription[2]; _nullableFacetDescription = new FacetDescription(DbProviderManifest.NullableFacetName, EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.Boolean), null, null, true); generalFacetDescriptions[0] = (_nullableFacetDescription); _defaultValueFacetDescription = new FacetDescription(DbProviderManifest.DefaultValueFacetName, MetadataItem.GetBuiltInType(BuiltInTypeKind.EdmType), null, null, null); generalFacetDescriptions[1] = (_defaultValueFacetDescription); _generalFacetDescriptions = Array.AsReadOnly(generalFacetDescriptions); _collectionKindFacetDescription = new FacetDescription(XmlConstants.CollectionKind, MetadataItem.GetBuiltInType(BuiltInTypeKind.EnumType), null, null, null); //////////////////////////////////////////////////////////////////////////////////////////////// // Add properties for the built-in complex types //////////////////////////////////////////////////////////////////////////////////////////////// TypeUsage stringTypeUsage = TypeUsage.Create(EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.String)); TypeUsage booleanTypeUsage = TypeUsage.Create(EdmProviderManifest.GetPrimitiveType(PrimitiveTypeKind.Boolean)); TypeUsage edmTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.EdmType)); TypeUsage typeUsageTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.TypeUsage)); TypeUsage complexTypeUsage = TypeUsage.Create(MetadataItem.GetBuiltInType(BuiltInTypeKind.ComplexType)); // populate the attributes for item attributes AddBuiltInTypeProperties(BuiltInTypeKind.MetadataProperty, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.TypeUsage, typeUsageTypeUsage), new EdmProperty(EdmConstants.Value, complexTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.MetadataItem, new EdmProperty[] { new EdmProperty(EdmConstants.ItemAttributes, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.MetadataProperty).GetCollectionType())), new EdmProperty(EdmConstants.Documentation, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.Documentation))) }); AddBuiltInTypeProperties(BuiltInTypeKind.TypeUsage, new EdmProperty[] { new EdmProperty(EdmConstants.EdmType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmType))), new EdmProperty(EdmConstants.Facets, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.Facet)))}); //populate the attributes for the edm type AddBuiltInTypeProperties(BuiltInTypeKind.EdmType, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Namespace, stringTypeUsage), new EdmProperty(EdmConstants.Abstract, booleanTypeUsage), new EdmProperty(EdmConstants.Sealed, booleanTypeUsage), new EdmProperty(EdmConstants.BaseType, complexTypeUsage) } ); AddBuiltInTypeProperties(BuiltInTypeKind.EnumType, new EdmProperty[] { new EdmProperty(EdmConstants.EnumMembers, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.CollectionType, new EdmProperty[] { new EdmProperty(EdmConstants.TypeUsage, typeUsageTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.RefType, new EdmProperty[] { new EdmProperty(EdmConstants.EntityType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntityType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmMember, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.TypeUsage, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.TypeUsage))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmProperty, new EdmProperty[] { new EdmProperty(EdmConstants.Nullable, stringTypeUsage), new EdmProperty(EdmConstants.DefaultValue, complexTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.NavigationProperty, new EdmProperty[] { new EdmProperty(EdmConstants.RelationshipTypeName, stringTypeUsage), new EdmProperty(EdmConstants.ToEndMemberName, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.RelationshipEndMember, new EdmProperty[] { new EdmProperty(EdmConstants.OperationBehaviors, complexTypeUsage), new EdmProperty(EdmConstants.RelationshipMultiplicity, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EnumType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EnumMember, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.ReferentialConstraint, new EdmProperty[] { new EdmProperty(EdmConstants.ToRole, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.RelationshipEndMember))), new EdmProperty(EdmConstants.FromRole, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.RelationshipEndMember))), new EdmProperty(EdmConstants.ToProperties, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmProperty).GetCollectionType())), new EdmProperty(EdmConstants.FromProperties, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmProperty).GetCollectionType())) } ); // Structural Type hierarchy AddBuiltInTypeProperties(BuiltInTypeKind.StructuralType, new EdmProperty[] { new EdmProperty(EdmConstants.Members, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmMember))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntityTypeBase, new EdmProperty[] { new EdmProperty(EdmConstants.KeyMembers, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmMember))) }); AddBuiltInTypeProperties(BuiltInTypeKind.Facet, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EdmType, edmTypeUsage), new EdmProperty(EdmConstants.Value, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EdmType))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntityContainer, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EntitySets, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntitySet))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EntitySetBase, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.EntityType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntityType))), new EdmProperty(EdmConstants.Schema, stringTypeUsage), new EdmProperty(EdmConstants.Table, stringTypeUsage) }); AddBuiltInTypeProperties(BuiltInTypeKind.AssociationSet, new EdmProperty[] { new EdmProperty(EdmConstants.AssociationSetEnds, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.AssociationSetEnd).GetCollectionType()))}); AddBuiltInTypeProperties(BuiltInTypeKind.AssociationSetEnd, new EdmProperty[] { new EdmProperty(EdmConstants.Role, stringTypeUsage), new EdmProperty(EdmConstants.EntitySetType, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EntitySet))) } ); AddBuiltInTypeProperties(BuiltInTypeKind.FunctionParameter, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Mode, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.EnumType))), new EdmProperty(EdmConstants.TypeUsage, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.TypeUsage))) }); AddBuiltInTypeProperties(BuiltInTypeKind.EdmFunction, new EdmProperty[] { new EdmProperty(EdmConstants.Name, stringTypeUsage), new EdmProperty(EdmConstants.Namespace, stringTypeUsage), new EdmProperty(EdmConstants.ReturnParameter, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.FunctionParameter))), new EdmProperty(EdmConstants.Parameters, TypeUsage.Create(GetBuiltInType(BuiltInTypeKind.FunctionParameter).GetCollectionType())) }); AddBuiltInTypeProperties(BuiltInTypeKind.Documentation, new EdmProperty[] { new EdmProperty(EdmConstants.Summary, stringTypeUsage), new EdmProperty(EdmConstants.LongDescription, stringTypeUsage) }); // Set all types to be readonly, used SetReadOnly to skip validation method to for (int i = 0; i < _builtInTypes.Length; i++) { _builtInTypes[i].SetReadOnly(); } InitializeNullTypeUsage(); } #endregion #region Fields private static EdmType[] _builtInTypes = new EdmType[EdmConstants.NumBuiltInTypes]; private static readonly System.Collections.ObjectModel.ReadOnlyCollection_generalFacetDescriptions; private static TypeUsage _nullTypeUsage; private static FacetDescription _nullableFacetDescription; private static FacetDescription _defaultValueFacetDescription; private static FacetDescription _collectionKindFacetDescription; #endregion #region Properties internal static FacetDescription DefaultValueFacetDescription { get { return _defaultValueFacetDescription; } } internal static FacetDescription CollectionKindFacetDescription { get { return _collectionKindFacetDescription; } } internal static FacetDescription NullableFacetDescription { get { return _nullableFacetDescription; } } internal static EdmProviderManifest EdmProviderManifest { get { return EdmProviderManifest.Instance; } } /// /// returns Null TypeUsage /// internal static TypeUsage NullType { get { return _nullTypeUsage; } } #endregion #region Methods ////// Returns the list of EDM builtin types /// public static EdmType GetBuiltInType(BuiltInTypeKind builtInTypeKind) { return _builtInTypes[(int)builtInTypeKind]; } ////// Returns the list of facet descriptions for a given type /// public static System.Collections.ObjectModel.ReadOnlyCollectionGetGeneralFacetDescriptions() { return _generalFacetDescriptions; } /// /// Initialize all the build in type with the given type attributes and properties /// /// The built In type which is getting initialized /// name of the built in type /// whether the type is abstract or not /// whether the type is sealed or not /// The base type of the built in type private static void InitializeBuiltInTypes(ComplexType builtInType, string name, bool isAbstract, ComplexType baseType) { // Initialize item attributes for all ancestor types EdmType.Initialize(builtInType, name, EdmConstants.EdmNamespace, DataSpace.CSpace, isAbstract, baseType); } ////// Add properties for all the build in complex type /// /// The type of the built In type whose properties are being added /// properties of the built in type private static void AddBuiltInTypeProperties(BuiltInTypeKind builtInTypeKind, EdmProperty[] properties) { ComplexType complexType = (ComplexType)GetBuiltInType(builtInTypeKind); if (properties != null) { for (int i = 0; i < properties.Length; i++) { complexType.AddMember(properties[i]); } } } ////// Initializes the enum type /// /// The built-in type kind enum value of this enum type /// The name of this enum type /// The member names of this enum type private static void InitializeEnumType(BuiltInTypeKind builtInTypeKind, string name, string[] enumMemberNames) { EnumType enumType = (EnumType)GetBuiltInType(builtInTypeKind); // Initialize item attributes for all ancestor types EdmType.Initialize(enumType, name, EdmConstants.EdmNamespace, DataSpace.CSpace, false, null); for (int i = 0; i < enumMemberNames.Length; i++) { enumType.AddMember(new EnumMember(enumMemberNames[i])); } } private static void InitializeNullTypeUsage() { ComplexType complexType = new ComplexType("NullType", String.Empty, DataSpace.CSpace); complexType.Abstract = true; _nullTypeUsage = TypeUsage.Create(complexType); } #endregion } } // 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
- DetailsViewDesigner.cs
- webeventbuffer.cs
- TextRenderingModeValidation.cs
- XmlEntity.cs
- OleDbRowUpdatingEvent.cs
- EventSetterHandlerConverter.cs
- WindowsEditBox.cs
- DecimalAverageAggregationOperator.cs
- WindowCollection.cs
- ZipIOCentralDirectoryBlock.cs
- _SafeNetHandles.cs
- FormsIdentity.cs
- BasicExpressionVisitor.cs
- SurrogateEncoder.cs
- DebugTraceHelper.cs
- TitleStyle.cs
- XmlTextReaderImplHelpers.cs
- LogSwitch.cs
- DateTimeOffsetStorage.cs
- DependencyPropertyKind.cs
- StylusCaptureWithinProperty.cs
- AuthorizationRule.cs
- Run.cs
- QuaternionKeyFrameCollection.cs
- DataGridViewRowCancelEventArgs.cs
- SiteMapSection.cs
- PackWebRequestFactory.cs
- TagPrefixAttribute.cs
- RectAnimation.cs
- NativeMethods.cs
- NewItemsContextMenuStrip.cs
- CodeDomExtensionMethods.cs
- HttpException.cs
- DragEventArgs.cs
- documentsequencetextpointer.cs
- XmlReader.cs
- HtmlElementCollection.cs
- EmptyStringExpandableObjectConverter.cs
- XpsPartBase.cs
- ScrollChrome.cs
- XpsSerializationException.cs
- EntityDataSourceReferenceGroup.cs
- login.cs
- SafeNativeMethods.cs
- SeverityFilter.cs
- TemplateBuilder.cs
- StickyNoteContentControl.cs
- InternalBase.cs
- ZipIORawDataFileBlock.cs
- ResolveMatches11.cs
- SubtreeProcessor.cs
- FormsIdentity.cs
- CodeDomLocalizationProvider.cs
- EventToken.cs
- ListViewItem.cs
- OdbcParameter.cs
- XmlText.cs
- TabPage.cs
- QuadraticBezierSegment.cs
- MulticastDelegate.cs
- ToolBarButtonClickEvent.cs
- ItemCheckEvent.cs
- CroppedBitmap.cs
- Timeline.cs
- SqlCaseSimplifier.cs
- PropertyPath.cs
- AudioLevelUpdatedEventArgs.cs
- SiteMapSection.cs
- CrossContextChannel.cs
- ColumnHeader.cs
- QilChoice.cs
- MD5HashHelper.cs
- XmlWrappingReader.cs
- PreservationFileWriter.cs
- _HeaderInfoTable.cs
- GPRECT.cs
- SQLRoleProvider.cs
- WebResourceAttribute.cs
- SafeProcessHandle.cs
- _SSPISessionCache.cs
- Visual3D.cs
- SystemIPv4InterfaceProperties.cs
- XmlException.cs
- UnmanagedMarshal.cs
- NetworkInformationException.cs
- DataGridViewCellPaintingEventArgs.cs
- hresults.cs
- WebServiceMethodData.cs
- DefaultTraceListener.cs
- MenuBindingsEditor.cs
- AspCompat.cs
- PositiveTimeSpanValidator.cs
- ClientBuildManager.cs
- DateTimeOffset.cs
- InputMethod.cs
- DataGridCellsPresenter.cs
- RadioButton.cs
- RadioButtonList.cs
- TextureBrush.cs
- StreamFormatter.cs