2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
// <copyright file="EntityContainer.cs" company="Microsoft">
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
// </copyright>
|
|
|
|
//
|
2017-08-21 15:34:15 +00:00
|
|
|
// @owner Microsoft
|
|
|
|
// @backupOwner Microsoft
|
2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Data.Common;
|
|
|
|
using System.Text;
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
|
|
|
namespace System.Data.Metadata.Edm
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// Class for representing an entity container
|
|
|
|
/// </summary>
|
|
|
|
public sealed class EntityContainer : GlobalItem
|
|
|
|
{
|
|
|
|
#region Constructors
|
|
|
|
/// <summary>
|
|
|
|
/// The constructor for constructing the EntityContainer object with the name, namespaceName, and version.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="name">The name of this entity container</param>
|
|
|
|
/// <param name="dataSpace">dataSpace in which this entity container belongs to</param>
|
|
|
|
/// <exception cref="System.ArgumentNullException">Thrown if the name argument is null</exception>
|
|
|
|
/// <exception cref="System.ArgumentException">Thrown if the name argument is empty string</exception>
|
|
|
|
internal EntityContainer(string name, DataSpace dataSpace)
|
|
|
|
{
|
|
|
|
EntityUtil.CheckStringArgument(name, "name");
|
|
|
|
|
|
|
|
_name = name;
|
|
|
|
this.DataSpace = dataSpace;
|
|
|
|
_baseEntitySets = new ReadOnlyMetadataCollection<EntitySetBase>(new EntitySetBaseCollection(this));
|
|
|
|
_functionImports = new ReadOnlyMetadataCollection<EdmFunction>(new MetadataCollection<EdmFunction>());
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Fields
|
|
|
|
private readonly string _name;
|
|
|
|
private readonly ReadOnlyMetadataCollection<EntitySetBase> _baseEntitySets;
|
|
|
|
private readonly ReadOnlyMetadataCollection<EdmFunction> _functionImports;
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
|
|
/// Returns the kind of the type
|
|
|
|
/// </summary>
|
|
|
|
public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.EntityContainer; } }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets the identity for this item as a string
|
|
|
|
/// </summary>
|
|
|
|
internal override string Identity
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
return this.Name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get the name of this EntityContainer object
|
|
|
|
/// </summary>
|
|
|
|
[MetadataProperty(PrimitiveTypeKind.String, false)]
|
|
|
|
public String Name
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
return _name;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets the collection of entity sets
|
|
|
|
/// </summary>
|
|
|
|
[MetadataProperty(BuiltInTypeKind.EntitySetBase, true)]
|
|
|
|
public ReadOnlyMetadataCollection<EntitySetBase> BaseEntitySets
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
return _baseEntitySets;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets the collection of function imports for this entity container
|
|
|
|
/// </summary>
|
|
|
|
[MetadataProperty(BuiltInTypeKind.EdmFunction, true)]
|
|
|
|
public ReadOnlyMetadataCollection<EdmFunction> FunctionImports
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
return _functionImports;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
/// <summary>
|
|
|
|
/// Sets this item to be readonly, once this is set, the item will never be writable again.
|
|
|
|
/// </summary>
|
|
|
|
internal override void SetReadOnly()
|
|
|
|
{
|
|
|
|
if (!IsReadOnly)
|
|
|
|
{
|
|
|
|
base.SetReadOnly();
|
|
|
|
this.BaseEntitySets.Source.SetReadOnly();
|
|
|
|
this.FunctionImports.Source.SetReadOnly();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get the entity set with the given name
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="name">name of the entity set to look up for</param>
|
|
|
|
/// <param name="ignoreCase">true if you want to do a case-insensitive lookup</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public EntitySet GetEntitySetByName(string name, bool ignoreCase)
|
|
|
|
{
|
|
|
|
EntitySet entitySet = (BaseEntitySets.GetValue(name, ignoreCase) as EntitySet);
|
|
|
|
if (null != entitySet)
|
|
|
|
{
|
|
|
|
return entitySet;
|
|
|
|
}
|
|
|
|
throw EntityUtil.InvalidEntitySetName(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get the entity set with the given name or return null if not found
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="name">name of the entity set to look up for</param>
|
|
|
|
/// <param name="ignoreCase">true if you want to do a case-insensitive lookup</param>
|
|
|
|
/// <param name="entitySet">out parameter that will contain the result</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="System.ArgumentNullException">if name argument is null</exception>
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get the relationship set with the given name
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="name">name of the relationship set to look up for</param>
|
|
|
|
/// <param name="ignoreCase">true if you want to do a case-insensitive lookup</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public RelationshipSet GetRelationshipSetByName(string name, bool ignoreCase)
|
|
|
|
{
|
|
|
|
RelationshipSet relationshipSet;
|
|
|
|
if (!this.TryGetRelationshipSetByName(name, ignoreCase, out relationshipSet))
|
|
|
|
{
|
|
|
|
throw EntityUtil.InvalidRelationshipSetName(name);
|
|
|
|
}
|
|
|
|
return relationshipSet;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Get the relationship set with the given name
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="name">name of the relationship set to look up for</param>
|
|
|
|
/// <param name="ignoreCase">true if you want to do a case-insensitive lookup</param>
|
|
|
|
/// <param name="relationshipSet">out parameter that will have the result</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="System.ArgumentNullException">if name argument is null</exception>
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Overriding System.Object.ToString to provide better String representation
|
|
|
|
/// for this type.
|
|
|
|
/// </summary>
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|