命名空间属性 (CSDL)

在概念性架构定义语言 (CSDL) 中声明的命名空间名称在 实体数据模型 (EDM) 中包含几个函数。为了使生成过程能够将可编程类连接到持久保留应用程序数据的存储结构,必须将 CSDL 架构中的类型和容器映射到存储元数据。映射规范语言 (MSL) 将概念性类型连接到描述该存储模型的存储架构定义语言 (SSDL) 定义。

从 CSDL 文件生成对象模型后,应用程序代码将使用 CSDL 文件中指定的命名空间引用生成过程创建的 DLL 中的类。以下 using 指令标识 AdventureWorksHRModel 命名空间中的类。

using AdventureWorksHRModel;

CSDL 架构中声明的命名空间还在 EDM 应用程序所需的 exe.config 文件中标识此对象模型。此示例中,连接字符串包含 HumanResources 类名称。该类名称基于实体容器名称。

有关实体容器的更多信息,请参见实体容器 (EDM)

<connectionStrings>
    <add name="HumanResources" connectionString='metadata=.;
    provider=System.Data.SqlClient; provider connection 
                                          string="server=servername;
    database=AdventureWorks; integrated security=true;
    multipleactiveresultsets=true"' providerName="System.Data.Mapping"/>
</connectionStrings>

有了之前的 exe.config 文件中的连接字符串,要为使用应用程序代码而实例化 HumanResources EntityConnection 仅需以下语句。

HumanResources hrDb = new HumanResources();

命名空间和映射

CSDL 架构 Schema 元素包含用于标识对象模型的命名空间名称。

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="AdventureWorksHRModel"
        Alias="Self"
        xmlns="https://schemas.microsoft.com/ado/2006/04/edm">

SSDL 文件中存在类似的一行。

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="AdventureWorksHRTarget"
        Alias="Self" 
        xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">

这些声明中使用的命名空间名称反应了它们在正在构建的数据模型中的作用。AdventureWorksHRModel 是映射到目标元数据命名空间 AdventureWorksHRTarget 的概念性模型。

概念性架构和存储架构中的 EntityContainer 元素独立于 Schema 元素,不过它们包含于 Schema 元素中。在映射规范中,EntityContainerMapping 元素通过引用容器对象而不是命名空间名称为这两个命名空间定义映射:edm:CdmEntityContainer="HumanResources"``edm:StorageEntityContainer="HumanResources"

下面的 MSL 头演示概念性架构中的 HumanResources 实体容器(此处称为 CdmEntityContainer)和存储元数据(称为 StorageEntityContainer)之间的映射。

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

Alias

CSDL Namespace 属性有一个相关的 Alias 属性,可用于在架构中其他位置缩短命名空间名称的长度。下面的示例将字符串 Self 分配给 Alias 属性。

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="AdventureWorksHRModel"
        Alias="Self" 
        xmlns="https://schemas.microsoft.com/ado/2006/04/edm">

Alias 在架构的其余部分中非常有用,它提高了可读性,如下面的语法所示。

  <EntityContainer Name="HumanResources">
    <EntitySet Name="Department" EntityType="Self.Department" />
    <EntitySet Name="Employee" EntityType="Self.Employee" />
    <EntitySet Name="EmployeeAddress" EntityType="Self.EmployeeAddress" />

Xmlns

前面的示例中还包含一个拥有已分配的 URL 的 xmlns 属性。所有 CSDL 架构都使用这个相同的 URL。

另请参见

概念

存储元数据架构 (SSDL)
映射规范 (MSL)
AdventureWorks 完整模型 (EDM)