实体容器 (EDM)
在 实体数据模型 (EDM) 中,EntityContainer 是实体集和关联集的逻辑分组。因为编程模型是从概念架构定义语言 (CSDL) 架构中生成的,所以,EntityContainer 用于所定义的对象模型中的命名空间的规范。在存储架构定义语言 (SSDL) 架构中,EntityContainer 标识为基于该模型生成的应用程序保存数据的存储容器。这可以是采用关系数据库管理系统 (RDBMS) 或某种其他技术的数据库。
EntityContainer 控制实体和关系的范围。EDM 中的所有类型都在 EntityContainer 命名空间的范围中定义。EntitySet 和 AssociationSet 的实例在 EntityContainer 的范围中创建。同样,EntityType 或 Association 的实例在 EntitySet 或 AssociationSet 的范围中创建。
在 XML 层次结构中,EntityContainer 元素独立于 Schema 元素,即使 EntityContainer 是在架构中定义的也是如此。这在将 EntityContainer 映射到存储时十分重要。在映射文件中,EntityContainer 的完全限定名称不包含架构命名空间名称。
EntityContainer 派生自 EDM 提供的基本 EntityContainer 构造。EntityContainer 指定派生自 EntitySet 和 AssociationSet 的类型。
EntityContainer 中定义的 EntitySet 可以包含在独立的 EntityContainer 中定义的 EntityType。
AssociationSet 不能引用在 EntityContainer 中定义的 EntitySet。
下面的示例演示两个实体类型和一个关联类型的声明,然后演示具有两个实体集和一个关联集的 EntityContainer 的声明。
以下架构包含实体声明:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.EntityTypes" Alias="Self">
<EntityType Name="Order">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="String" />
<!--Other Properties-->
</EntityType>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="CustomerId" />
</Key>
<Property Name="CustomerId" Type="String" />
<!--Other Properties-->
</EntityType>
</Schema>
以下架构包含关联声明:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.RelationshipTypes">
<Using Namespace="MyCompany.EntityTypes" Alias="basicTypes"/>
<Association Name="CustomerOrder">
<End Type="basicTypes.Customer" Multiplicity="1" />
<End Type="basicTypes.Order" Multiplicity="*" />
</Association>
</Schema>
以下架构包含实体容器声明:
<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
Namespace="MyCompany.ContainerType">
<EntityContainer name="ContainerOne">
<Using Namespace="MyCompany.EntityTypes" Alias="basicTypes"/>
<Using Namespace="MyCompany.RelationshipTypes" Alias="relnTypes"/>
<EntitySet Name="CustomerSet" EntityType="basicTypes.Customer"/>
<EntitySet Name="OrderSet" EntityType="basicTypes.Order"/>
<AssociationSet Name="CustomerOrderSet" Association="relnTypes.CustomerOrder">
<End EntitySet="CustomerSet" Role="Orders"/>
<End EntitySet="OrderSet" Role="OrderedBy"/>
</AssociationSet>
</EntityContainer>
</Schema>