//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Data.Common; using System.Text; using System.Diagnostics; namespace System.Data.Metadata.Edm { /// /// Class for representing an entity container /// public sealed class EntityContainer : GlobalItem { #region Constructors /// /// The constructor for constructing the EntityContainer object with the name, namespaceName, and version. /// /// The name of this entity container /// dataSpace in which this entity container belongs to /// Thrown if the name argument is null /// Thrown if the name argument is empty string internal EntityContainer(string name, DataSpace dataSpace) { EntityUtil.CheckStringArgument(name, "name"); _name = name; this.DataSpace = dataSpace; _baseEntitySets = new ReadOnlyMetadataCollection(new EntitySetBaseCollection(this)); _functionImports = new ReadOnlyMetadataCollection(new MetadataCollection()); } #endregion #region Fields private readonly string _name; private readonly ReadOnlyMetadataCollection _baseEntitySets; private readonly ReadOnlyMetadataCollection _functionImports; #endregion #region Properties /// /// Returns the kind of the type /// public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.EntityContainer; } } /// /// Gets the identity for this item as a string /// internal override string Identity { get { return this.Name; } } /// /// Get the name of this EntityContainer object /// [MetadataProperty(PrimitiveTypeKind.String, false)] public String Name { get { return _name; } } /// /// Gets the collection of entity sets /// [MetadataProperty(BuiltInTypeKind.EntitySetBase, true)] public ReadOnlyMetadataCollection BaseEntitySets { get { return _baseEntitySets; } } /// /// Gets the collection of function imports for this entity container /// [MetadataProperty(BuiltInTypeKind.EdmFunction, true)] public ReadOnlyMetadataCollection FunctionImports { get { return _functionImports; } } #endregion #region Methods /// /// Sets this item to be readonly, once this is set, the item will never be writable again. /// internal override void SetReadOnly() { if (!IsReadOnly) { base.SetReadOnly(); this.BaseEntitySets.Source.SetReadOnly(); this.FunctionImports.Source.SetReadOnly(); } } /// /// Get the entity set with the given name /// /// name of the entity set to look up for /// true if you want to do a case-insensitive lookup /// public EntitySet GetEntitySetByName(string name, bool ignoreCase) { EntitySet entitySet = (BaseEntitySets.GetValue(name, ignoreCase) as EntitySet); if (null != entitySet) { return entitySet; } throw EntityUtil.InvalidEntitySetName(name); } /// /// Get the entity set with the given name or return null if not found /// /// name of the entity set to look up for /// true if you want to do a case-insensitive lookup /// out parameter that will contain the result /// /// if name argument is null public bool TryGetEntitySetByName(string name, bool ignoreCase, out EntitySet entitySet) { EntityUtil.CheckArgumentNull(name, "name"); EntitySetBase baseEntitySet = null; entitySet = null; if (this.BaseEntitySets.TryGetValue(name, ignoreCase, out baseEntitySet)) { if (Helper.IsEntitySet(baseEntitySet)) { entitySet = (EntitySet)baseEntitySet; return true; } } return false; } /// /// Get the relationship set with the given name /// /// name of the relationship set to look up for /// true if you want to do a case-insensitive lookup /// public RelationshipSet GetRelationshipSetByName(string name, bool ignoreCase) { RelationshipSet relationshipSet; if (!this.TryGetRelationshipSetByName(name, ignoreCase, out relationshipSet)) { throw EntityUtil.InvalidRelationshipSetName(name); } return relationshipSet; } /// /// Get the relationship set with the given name /// /// name of the relationship set to look up for /// true if you want to do a case-insensitive lookup /// out parameter that will have the result /// /// if name argument is null public bool TryGetRelationshipSetByName(string name, bool ignoreCase, out RelationshipSet relationshipSet) { EntityUtil.CheckArgumentNull(name, "name"); EntitySetBase baseEntitySet = null; relationshipSet = null; if (this.BaseEntitySets.TryGetValue(name, ignoreCase, out baseEntitySet)) { if (Helper.IsRelationshipSet(baseEntitySet)) { relationshipSet = (RelationshipSet)baseEntitySet; return true; } } return false; } /// /// Overriding System.Object.ToString to provide better String representation /// for this type. /// public override string ToString() { return Name; } internal void AddEntitySetBase(EntitySetBase entitySetBase) { _baseEntitySets.Source.Add(entitySetBase); } internal void AddFunctionImport(EdmFunction function) { Debug.Assert(function != null, "function != null"); Debug.Assert(function.IsFunctionImport, "function.IsFunctionImport"); _functionImports.Source.Add(function); } #endregion } }