实现实体 (EDM)

在所有 实体数据模型 (EDM) 应用程序中,实体都在概念架构定义语言 (CSDL) 中定义并映射到元数据,这些元数据以存储架构定义语言 (SSDL) 描述数据结构。本示例演示单个实体的设计以及如何将其映射到存储。

此示例实体所面向的应用程序定义有关企业中员工的信息。

概念架构

以下面的概念架构定义语言 (CSDL) 语法定义的实体包含名为 EmployeesNamespace 中某个数据类型的规范。Namespace 包含一个 EntityType 声明:Employees

Employees 实体的属性包含用于标识员工的基本信息。EmployeeId 属性声明为 Guid,用于唯一标识此类型的实例。EmployeeId 属性标记为 Key(键)。

其他三个属性通过 FirstNameLastNameEmail 地址标识此员工。

除了实体规范之外,CSDL 架构还包含 EntitySetEntityContainer 声明。EntityContainerEntitySet 规范定义数据模型中数据类型的范围。EntityContainer 包含 EntitySet。在此示例中,名为 EmployeesEntitySet 包含 Employee 类型。

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees" Alias="Self" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="EmployeesContext">
    <EntitySet Name="Employees" EntityType="Employees.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>
</Schema>

Namespace 架构包含 Employee 实体和除 EntityContainer(独立于架构 Namespace)之外的所有集。有关 EntityContainer 的更多信息,请参见 EntityContainerMapping 元素 (MSL)

在此数据模型之上生成的应用程序引用 Namespace 以使用在此模型之上生成的类。

这一 CSDL 规范称为概念架构或设计架构。以 SSDL 语法表示的存储元数据中的并行实体名称对应于存储结构。此 CSDL 架构中的 EntitySet 对应于在 SSDL 架构中指定的表的名称。此表包含 Employee 实体(由在此模型上生成的应用程序使用)的实例数据。Employee 实体的各个属性对应于表的各列。

存储架构

SSDL 中的存储元数据描述的数据库包含在概念架构中定义的 Employees 的实例。

在下面的架构中定义的 Employees.Store 命名空间是已在概念架构中定义的 Employees 模型的目标数据库。

此架构中的 EntitySetEmployees 表示名为 Employees 的数据表。此架构指定的 EntityType 对应于在概念架构中定义的 EntityType。存储元数据中的名称不必与概念架构中的名称相匹配,但它确实必须与数据库表的名称相匹配。

下面的架构描述由在 SSDL 文件中指定的 EntityContainer 表示的数据库对象 dbo。此示例中的 EntityContainer 包含名为 Employees 的表。

?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees.Store" Alias="Self"
    Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
  <EntityContainer Name="dbo">
    <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false" />
    <Property Name="Email" Type="nvarchar" Nullable="false" />
  </EntityType>
</Schema>

映射规范

映射规范在映射规范语言 (MSL) 中定义。此 MSL 规范将 CSDL 架构连接到使用 SSDL 架构中元数据的数据库。

此 MSL 架构的元素包括 EntityContainerMappingStorageEntityContainerEntityTypeMappingMappingFragmentScalarProperty 映射。EntityContainerMappingCdmEntityContainer 映射到 StorageEntityContainer,在此示例中,是将 EmployeeSkills 实体容器映射到数据库对象 dbo

请注意,分配给 StorageEntityContainerCdmEntityContainer 的名称不受架构命名空间限定。StorageEntityContainerCdmEntityContainer 是不同的元素,并且独立于概念架构和存储元数据中的架构元素。使用命名空间名称限定 StorageEntityContainerCdmEntityContainer 名称会导致映射异常。

StorageEntityContainerCdmEntityContainer 映射之后,EntitySetMapping 指定对应于以下概念元素的 StoreEntitySet

TypeNameEmployees)。

ScalarProperty 元素将 TypeName 的属性 (Property) 映射为对应于 ColumnName 元素(如 Name="EmployeeId" ColumnName="EmployeeId")的 Name 属性 (Attribute)。语法 Name 指定概念架构中的实体的属性,而 ColumnName 指定目标数据库中 Employees 数据表的列。

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
     xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo"
        CdmEntityContainer="EmployeesContext">
    <EntitySetMapping Name="Employees" StoreEntitySet="Employees"
        TypeName="Employees.Employees">

      <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Email" ColumnName="Email" />

    </EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

另请参见

概念

实现关联 (EDM)

其他资源

架构和映射规范(实体框架)
EDM 规范