エンティティの実装 (EDM)

すべての エンティティ データ モデル (EDM) アプリケーションにおいて、エンティティは概念スキーマ定義言語 (CSDL) で定義され、データ構造がストア スキーマ定義言語 (SSDL) で記述されるメタデータにマップされます。この例では、単一のエンティティのデザインと、エンティティをストレージにマップする方法を示します。

このサンプル エンティティのデザイン対象となるアプリケーションでは、企業の従業員に関する情報を定義します。

概念スキーマ

次の概念スキーマ定義言語 (CSDL) 構文に定義されているエンティティは、Employes という名前の名前空間のデータ型の指定を含んでいます。名前空間には、単独の EntityType 宣言である Employees が含まれます。

Employees エンティティのプロパティは、従業員を識別するための基本的な情報を格納します。EmployeeId プロパティは、型のインスタンスを一意に識別する Guid として宣言されています。EmployeeId プロパティは、キーとしてタグ付けされています。

さらに、従業員を識別する 3 つのプロパティとして、FirstNameLastName、および Email (アドレス) が定義されています。

エンティティの指定に加え、CSDL スキーマには、EntitySetEntityContainer の宣言が含まれています。EntityContainerEntitySet の指定は、データ モデルのデータ型のスコープを定義します。EntityContainer には EntitySet が含まれます。この例では、Employees という名前の EntitySetEmployee 型が含まれます。

<?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>

名前空間スキーマには、Employee エンティティと、スキーマ Namespace とは別個の独立した EntityContainer を除くすべてのセットが含まれます。EntityContainer の詳細については、「EntityContainerMapping 要素 (MSL)」を参照してください。

このデータ モデルに基づいて構築されたアプリケーションは、名前空間を参照して、このモデルに基づいて構築されたクラスを使用します。

この 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 仕様は、SSDL スキーマ内のメタデータを使用して CSDL スキーマをデータベースに関連付けます。

この MSL スキーマの要素には、EntityContainerMappingStorageEntityContainerEntityTypeMappingMappingFragment、および ScalarProperty のマッピングがあります。EntityContainerMapping は、CdmEntityContainerStorageEntityContainer にマップします (この場合は、EmployeeSkills エンティティ コンテナをデータベース オブジェクト dbo にマップします)。

StorageEntityContainer および CdmEntityContainer に割り当てられる名前は、スキーマ名前空間で修飾されません。StorageEntityContainerCdmEntityContainer は、概念スキーマとストレージ メタデータの両方において、スキーマ要素から別個に独立しています。StorageEntityContainer および CdmEntityContainer の名前を修飾するために名前空間名を使用すると、マッピング例外が発生します。

StorageEntityContainerCdmEntityContainer のマッピングに続く EntitySetMapping は、概念型の TypeNameEmployees に対応する StoreEntitySet

を指定します。

TypeName のプロパティは、ScalarProperty 要素によって、ColumnName 要素に対応する Name 属性としてマップされます (たとえば、Name="EmployeeId" ColumnName="EmployeeId")。構文 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)

その他のリソース

スキーマおよびマッピング スキーマ (Entity Framework)
EDM 仕様