SSDL 仕様

ストア スキーマ定義言語 (SSDL) は、Entity Framework アプリケーションのストレージ モデルを表す XML ベースの言語です。

Entity Framework アプリケーションでは、ストレージ モデル メタデータは、.ssdl ファイル (SSDL で記述) から System.Data.Metadata.Edm.StoreItemCollection のインスタンスに読み込まれ、System.Data.Metadata.Edm.MetadataWorkspace クラスのメソッドを使用してアクセスできます。 Entity Framework ではストレージ モデル メタデータを使用して、概念モデルに対するクエリをストア固有のコマンドに変換します。

Entity Framework Designer (EF Designer) により、設計時にストレージ モデル情報が .edmx ファイルに格納されます。 Entity Designer では、ビルド時に .edmx ファイルの情報を使用して .ssdl ファイルを作成します。これは、Entity Framework で実行時に必要になります。

SSDL のバージョンは、XML 名前空間で区別されます。

SSDL バージョン XML 名前空間
SSDL v1 https://schemas.microsoft.com/ado/2006/04/edm/ssdl
SSDL v2 https://schemas.microsoft.com/ado/2009/02/edm/ssdl
SSDL v3 https://schemas.microsoft.com/ado/2009/11/edm/ssdl

Association 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Association 要素では、基になるデータベースの外部キー制約に関与しているテーブル列を指定します。 必須の 2 つの子 End 要素では、アソシエーションの両 End のテーブルと各 End のカーディナリティを指定します。 オプションの ReferentialConstraint 要素では、アソシエーションのプリンシパル End と依存 End、および参加する列を指定します。 ReferentialConstraint 要素がない場合は、AssociationSetMapping 要素を使用してアソシエーションの列マッピングを指定する必要があります。

Association 要素には、次の子要素を (リストされている順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • End (2 個)
  • ReferentialConstraint (0 個または 1 個)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、Association 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい 基盤となるデータベースの対応する外部キー制約の名前。

Note

Association 素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、ReferentialConstraint 要素を使用して、FK_CustomerOrders 外部キー制約に関与している列を指定する Association 要素を示します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

AssociationSet 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の AssociationSet 要素は、基になるデータベース内の 2 つのテーブル間の外部キー制約を表します。 外部キー制約に参加するテーブル列は、Association 要素で指定します。 特定の AssociationSet 要素に対応する Association 要素は、AssociationSet 要素の Association 属性で指定されます。

SSDL アソシエーション セットは、AssociationSetMapping 要素によって CSDL アソシエーション セットにマップされます。 しかし、特定の CSDL アソシエーション セットの CSDL アソシエーションが、ReferentialConstraint element を使用して定義されている場合、AssociationSetMapping 要素は不要です。 この場合、AssociationSetMapping 要素が存在すれば、それによって定義されるマッピングは ReferentialConstraint 要素によってオーバーライドされます。

AssociationSet 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • End (0 個または 2 個)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、AssociationSet 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい アソシエーション セットが表す外部キー制約の名前。
関連付け はい 外部キー制約に参加する列を定義するアソシエーションの名前。

Note

AssociationSet 素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、基になるデータベース内の FK_CustomerOrders 外部キー制約を表す AssociationSet 要素を示しています。

 <AssociationSet Name="FK_CustomerOrders"
                 Association="ExampleModel.Store.FK_CustomerOrders">
   <End Role="Customers" EntitySet="Customers" />
   <End Role="Orders" EntitySet="Orders" />
 </AssociationSet>

CollectionType 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の CollectionType 要素では、関数の戻り値の型がコレクションであることを指定します。 CollectionType 要素は ReturnType 要素の子です。 コレクションの型は、RowType 子要素を使用して指定されます。

Note

CollectionType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、CollectionType 要素を使用して、関数で行のコレクションが返されることを指定する関数を示しています。

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

CommandText 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の CommandText 要素は、データベースで実行される SQL ステートメントを定義できる Function 要素の子です。 CommandText 要素を使用すると、データベースのストアド プロシージャと同様の機能を追加できますが、CommandText 要素はストレージ モデル内で定義します。

CommandText 要素に子要素を含めることはできません。 CommandText 要素の本体は、基になるデータベースに対して有効な SQL ステートメントである必要があります。

CommandText 要素に適用できる属性はありません。

次の例は、子 CommandText 要素がある Function 要素を示しています。 概念モデルにインポートすることで、UpdateProductInOrder 関数を ObjectContext のメソッドとして公開します。  

 <Function Name="UpdateProductInOrder" IsComposable="false">
   <CommandText>
     UPDATE Orders
     SET ProductId = @productId
     WHERE OrderId = @orderId;
   </CommandText>
   <Parameter Name="productId"
              Mode="In"
              Type="int"/>
   <Parameter Name="orderId"
              Mode="In"
              Type="int"/>
 </Function>

DefiningQuery 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の DefiningQuery 要素を使用すると、基になるデータベースで直接 SQL ステートメントを実行できます。 通常、DefiningQuery 要素は、データベース ビューのように使用されますが、データベースではなくストレージ モデルでビューが定義されます。 DefiningQuery 要素で定義されたビューは、EntitySetMapping 要素を通じて概念モデルのエンティティ型にマップできます。 このようなマッピングは、読み取り専用です。  

次の SSDL 構文は、ビューを取得するために使用されるクエリを含む DefiningQuery 要素が続く EntitySet の宣言を示しています。

 <Schema>
     <EntitySet Name="Tables" EntityType="Self.STable">
         <DefiningQuery>
           SELECT  TABLE_CATALOG,
                   'test' as TABLE_SCHEMA,
                   TABLE_NAME
           FROM    INFORMATION_SCHEMA.TABLES
         </DefiningQuery>
     </EntitySet>
 </Schema>

Entity Framework でストアド プロシージャを使用して、ビューに対する読み取り/書き込みシナリオを有効にすることができます。 データ ソース ビューまたは Entity SQL ビューのいずれかを、ストアド プロシージャによるデータ取得および変更処理のベース テーブルとして使用できます。

DefiningQuery 要素を使用して、Microsoft SQL Server Compact 3.5 を対象にすることができます。 SQL Server Compact 3.5 ではストアド プロシージャはサポートされていませんが、DefiningQuery 要素を使用して同様の機能を実装することができます。 他にこの要素が役立つ状況として、ストアド プロシージャを作成してプログラミング言語で使用されているデータ型とデータ ソースで使用されているデータ型の不一致を克服することができます。 特定のパラメーター セットを取る DefiningQuery を作成してから、データを削除するストアド プロシージャなど、別のパラメーター セットを使用するストアド プロシージャを呼び出すことができます。

Dependent 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Dependent 要素は、外部キー制約 (参照制約ともいう) の依存 End を定義する ReferentialConstraint 要素に対する子要素です。 Dependent 要素では、1 つ (または複数) の主キー列を参照するテーブル内の 1 つ (または複数) の列を指定します。 PropertyRef 要素は、参照される列を指定します。 Principal 要素では、Dependent 要素で指定されている列によって参照される主キー列を指定します。

Dependent 要素には、次の子要素を (リストされている順序で) 含めることができます。

  • PropertyRef (1 個以上)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、Dependent 要素に適用できる属性について説明します。

属性名 必要に応じて Value
役割 はい 対応する End 要素の Role 属性 (使用されている場合) と同じ値です。それ以外の場合は、参照している列を含むテーブルの名前となります。

Note

Dependent 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、ReferentialConstraint 要素を使用して、FK_CustomerOrders 外部キー制約に関与している列を指定する Association 要素を示します。 Dependent 要素では、制約の依存 End として Order テーブルの CustomerId 列を指定します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Documentation 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Documentation 要素は、親要素で定義されているオブジェクトに関する情報の提供に使用できます。

Documentation 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Summary: 親要素の簡単な説明 (0 個または 1 個の要素)。
  • LongDescription: 親要素の詳細な説明 (0 個または 1 個の要素)。

該当する属性

Documentation 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、EntityType 要素の子要素として Documentation 要素が示されています。

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

End 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の End 要素では、基になるデータベースの外部キー制約の一方の End でテーブルと行数を指定します。 End 要素は、Association 要素または AssociationSet 要素の子にすることができます。 それぞれの場合において、使用可能な子要素と該当する属性は異なります。

Association 要素の子としての End 要素

End 要素 (Association 要素の子としての) は、Type および Multiplicity 属性をそれぞれ使用して、外部キー制約の End でテーブルと行数を指定します。 外部キー制約の End は、SSDL アソシエーションの一部として定義されます。SSDL アソシエーションには End が 2 つ必要です。

End 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個の要素)
  • OnDelete (0 個または 1 個の要素)
  • Annotation 要素 (0 個以上の要素)

該当する属性

次の表では、End 要素が Association 要素の子である場合に適用できる属性について説明します。

属性名 必要に応じて
Type はい 外部キー制約の End にある SSDL エンティティ セットの完全修飾名。
役割 いいえ 対応する ReferentialConstraint 要素の Principal または Dependent 要素の Role 属性の値 (使用されている場合)。
カーディナリティ はい 外部キー制約の End に存在できる行数に応じて、10..1、または *
1 は、外部キー制約の End に 1 行だけ存在することを示します。
0..1 は、外部キー制約の End に 0 または 1 行存在することを示します。
* は、外部キー制約の End に 0、1、または複数行存在することを示します。

Note

End 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、FK_CustomerOrders 外部キー制約を定義する Association 要素を示します。 各 End 要素に指定されている Multiplicity 値は、Orders テーブルの多くの行を Customers テーブルの 1 行に関連付けることはできるが、Orders テーブルの 1 行に関連付けることができるのは Customers テーブルの 1 行のみであることを示します。 さらに、OnDelete 要素は、Customers テーブルの行が削除される場合、Customers テーブルの特定の行を参照している Orders テーブルのすべての行が削除されることを示します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

AssociationSet 要素の子としての End 要素

End 要素 (AssociationSet 要素の子としての) では、基になるデータベースで外部キー制約の一方の End でテーブルを指定します。

End 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、End 要素が AssociationSet 要素の子である場合に適用できる属性について説明します。

属性名 必要に応じて Value
EntitySet はい 外部キー制約の End にある SSDL エンティティ セットの名前。
役割 いいえ 対応する Association 要素の 1 つの End 要素で指定されているいずれかの Role 属性の値。

Note

End 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、End 要素が 2 つある AssociationSet 要素を含む EntityContainer 要素を示しています。

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityContainer 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の EntityContainer 要素では、Entity Framework アプリケーションで基になるデータ ソースの構造を記述します。SSDL エンティティ セット (EntitySet 要素で定義されている) はデータベース内のテーブルを表し、SSDL エンティティ型 (EntityType 要素で定義されている) はテーブル内の行を表し、アソシエーション セット (AssociationSet 要素で定義されている) はデータベース内の外部キー制約を表します。 ストレージ モデルのエンティティ コンテナーは、EntityContainerMapping 要素によって概念モデルのエンティティ コンテナーにマップされます。

EntityContainer 要素には、0 個または 1 個の Documentation 要素を含めることができます。 Documentation 要素が存在する場合、それは他のすべての子要素の前にある必要があります。

EntityContainer 要素には、(ここで示す順序で) 次の子要素を 0 個以上含めることができます。

  • EntitySet
  • AssociationSet
  • Annotation 要素

該当する属性

以下の表では、EntityContainer 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい エンティティ コンテナー名。 この名前にピリオド (.) を含めることはできません。

Note

EntityContainer 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例に、2 つのエンティティ セットと 1 つのアソシエーション セットを定義する EntityContainer 要素を示します。 エンティティ型およびアソシエーション型の名前は、概念モデルの名前空間名によって修飾されます。

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntitySet 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の EntitySet 要素は、基になるデータベースのテーブルまたはビューを表します。 SSDL の EntityType 要素は、テーブルまたはビュー内の行を表します。 EntitySet 要素の EntityType 属性では、SSDL エンティティ セット内の行を表す特定の SSDL エンティティ型を指定します。 CSDL エンティティ セットと SSDL エンティティ セットの間のマッピングは、EntitySetMapping 要素で指定します。

EntitySet 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個の要素)
  • DefiningQuery (0 個または 1 個の要素)
  • Annotation 要素

該当する属性

次の表では、EntitySet 要素に適用できる属性について説明します。

Note

一部の属性 (ここにリストされていない) は、ストア エイリアスで修飾できます。 このような属性は、モデルの更新時にモデルの更新ウィザードで使用されます。

属性名 必要に応じて Value
名前 はい エンティティ セットの名前。
EntityType はい エンティティ型の完全修飾名。そのインスタンスは、エンティティ セットに格納されます。
[スキーマ] いいえ データベース スキーマ。
テーブル いいえ データベース テーブル。

Note

EntitySet 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、2 つの EntitySet 要素と 1 つの AssociationSet 要素がある EntityContainer 要素を示しています。

 <EntityContainer Name="ExampleModelStoreContainer">
   <EntitySet Name="Customers"
              EntityType="ExampleModel.Store.Customers"
              Schema="dbo" />
   <EntitySet Name="Orders"
              EntityType="ExampleModel.Store.Orders"
              Schema="dbo" />
   <AssociationSet Name="FK_CustomerOrders"
                   Association="ExampleModel.Store.FK_CustomerOrders">
     <End Role="Customers" EntitySet="Customers" />
     <End Role="Orders" EntitySet="Orders" />
   </AssociationSet>
 </EntityContainer>

EntityType 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の EntityType 要素は、基になるデータベースのテーブルまたはビュー内の行を表します。 SSDL の EntitySet 要素は、行が発生するテーブルまたはビューを表します。 EntitySet 要素の EntityType 属性では、SSDL エンティティ セット内の行を表す特定の SSDL エンティティ型を指定します。 SSDL エンティティ型と CSDL エンティティ型の間のマッピングは、EntityTypeMapping 要素で指定します。

EntityType 要素には、次の子要素を (リストされている順序で) 含めることができます。

  • Documentation (0 個または 1 個の要素)
  • Key (0 個または 1 個の要素)
  • Annotation 要素

該当する属性

以下の表では、EntityType 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい エンティティ タイプの名前。 通常、この値は、エンティティ型が行を表すテーブルの名前と同じです。 この値にピリオド (.) を含めることはできません。

Note

EntityType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、2 つのプロパティがある EntityType 要素を示しています。

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

Function 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Function 要素では、基になるデータベースに存在するストアド プロシージャを指定します。

Function 要素には、次の子要素を (リストされている順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • Parameter (0 個以上)
  • CommandText (0 または 1 個)
  • ReturnType (0 個以上)
  • Annotation 要素 (0 個以上)

関数の戻り値の型は、ReturnType 要素と ReturnType 属性の両方ではなく、いずれかを使用して指定する必要があります (下記参照)。

ストレージ モデル内で指定されるストアド プロシージャは、アプリケーションの概念モデルにインポートできます。 詳細については、ストアド プロシージャを使用するクエリの実行に関するページを参照してください。 Function 要素は、ストレージ モデルでカスタム関数を定義するために使用することもできます。  

該当する属性

次の表では、Function 要素に適用できる属性について説明します。

Note

一部の属性 (ここにリストされていない) は、ストア エイリアスで修飾できます。 このような属性は、モデルの更新時にモデルの更新ウィザードで使用されます。

属性名 必要に応じて Value
名前 はい ストアド プロシージャの名前。
ReturnType いいえ ストアド プロシージャの戻り値の型。
集計 いいえ ストアド プロシージャで集計値が返される場合は True。それ以外の場合は False
BuiltIn いいえ 関数が組み込み1 関数である場合は True。それ以外の場合は False
StoreFunctionName いいえ ストアド プロシージャの名前。
NiladicFunction いいえ 関数がニラディック2 関数の場合は True。それ以外の場合は False
IsComposable いいえ 関数がコンポーザブル3 関数の場合は True。それ以外の場合は False
ParameterTypeSemantics いいえ 関数オーバーロードの解決に使用される型のセマンティクスを定義する列挙。 列挙はプロバイダー マニフェストで関数定義によって定義されます。 既定値は AllowImplicitConversion です。
[スキーマ] いいえ ストアド プロシージャが定義されているスキーマの名前。

1 組み込み関数は、データベースで定義されている関数です。 ストレージ モデルで定義されている関数の詳細については、「CommandText 要素 (SSDL)」を参照してください。

2 ニラディック関数は、パラメーターを受け入れず、呼び出し時にかっこを必要としない関数です。

3 1 つの関数の出力をもう一方の関数の入力にすることができる場合、2 つの関数はコンポーザブルとなります。

Note

Function 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、UpdateOrderQuantity ストアド プロシージャに対応する Function 要素を示しています。 このストアド プロシージャは 2 個のパラメーターを受け入れ、値を返しません。

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

key 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Key 要素は、基になるデータベース内のテーブルの主キーを表します。 Key は EntityType 要素の子要素です。これはテーブル内の行を表します。 主キーは、EntityType 要素で定義される 1 つまたは複数の Property 要素を参照することにより、Key 要素内で定義されます。

Key 要素には、次の子要素を (リストされている順序で) 含めることができます。

  • PropertyRef (1 個以上)
  • Annotation 要素

Key 要素に属性を適用することはできません。

次の例では、1 つのプロパティを参照するキーがある EntityType 要素を示しています。

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

OnDelete 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の OnDelete 要素には、外部キー制約に関与している行が削除されるときのデータベースの動作が反映されます。 アクションが Cascade に設定されている場合は、削除される行を参照している行も削除されます。 アクションが None に設定されている場合、削除される行を参照している行は削除されません。 OnDelete 要素は、End 要素の子要素です。

OnDelete 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、OnDelete 要素に適用できる属性について説明します。

属性名 必要に応じて Value
操作 はい Cascade または None。 (Restricted の値は有効ですが、None と同じ動作になります)。

Note

OnDelete 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、FK_CustomerOrders 外部キー制約を定義する Association 要素を示します。 OnDelete 要素は、Customers テーブルの行が削除される場合、Customers テーブルの特定の行を参照している Orders テーブルのすべての行が削除されることを示します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Parameter 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Parameter 要素は、データベース内のストアド プロシージャのパラメーターを指定する Function 要素の子です。

Parameter 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • Documentation (0 個または 1 個)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、Parameter 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい パラメーターの名前。
Type はい パラメーターの型。
モード いいえ パラメーターが入力、出力、あるいは入力/出力パラメーターであるかに応じて、InOut、または InOut
MaxLength いいえ パラメーターの最大長。
[精度] いいえ パラメーターの説明
スケール いいえ パラメーターの小数点以下桁数
SRID いいえ 空間システム参照識別子。 空間型のパラメーターにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。

Note

Parameter 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、入力パラメーターを指定する 2 つのParameter 要素がある Function 要素を示しています。

 <Function Name="UpdateOrderQuantity"
           Aggregate="false"
           BuiltIn="false"
           NiladicFunction="false"
           IsComposable="false"
           ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="orderId" Type="int" Mode="In" />
   <Parameter Name="newQuantity" Type="int" Mode="In" />
 </Function>

Principal 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Principal 要素は、外部キー制約 (参照制約ともいう) のプリンシパル End を定義する ReferentialConstraint 要素に対する子要素です。 Principal 要素では、別の列 (または複数の列) によって参照されるテーブル内の主キー列 (または複数の列) を指定します。 PropertyRef 要素は、参照される列を指定します。 Dependent 要素では、Principal 要素で指定されている主キー列を参照する列を指定します。

Principal 要素には、次の子要素を (ここで示す順序で) 含めることができます。

  • PropertyRef (1 個以上)
  • Annotation 要素 (0 個以上)

該当する属性

次の表では、Principal 要素に適用できる属性について説明します。

属性名 必要に応じて Value
役割 はい 対応する End 要素の Role 属性 (使用されている場合) と同じ値です。それ以外の場合は、参照される列を含むテーブルの名前です。

Note

Principal 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、ReferentialConstraint 要素を使用して、FK_CustomerOrders 外部キー制約に関与している列を指定する Association 要素を示します。 Principal 要素では、制約のプリンシパル End として Customer テーブルの CustomerId 列を指定します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

Property 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Property 要素は、基になるデータベースのテーブルの列を表します。 Property 要素は EntityType 要素の子です。これはテーブル内の行を表します。 EntityType 要素で定義される各 Property 要素は、1 つの列を表します。

Property 要素には、どの子要素も含めることはできません。

該当する属性

次の表では、Property 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい 対応する列の名前。
Type はい 対応する列の種類。
NULL 値の使用 いいえ 対応する列に null 値を含められるかどうかに応じて、True (既定値) または False
DefaultValue いいえ 対応する列の既定値。
MaxLength いいえ 対応する列の最大長。
FixedLength いいえ 対応する列の値が固定長の文字列として格納されるかどうかに応じて、True または False
[精度] いいえ 対応する列の有効桁数。
スケール いいえ 対応する列の小数点以下桁数。
Unicode いいえ 対応する列の値が Unicode 文字列として格納されるかどうかに応じて、True または False
Collation いいえ データ ソースで使用される照合順序を指定する文字列。
SRID いいえ 空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
StoreGeneratedPattern いいえ NoneIdentity (対応する列の値がデータベースで生成された ID の場合)、または Computed (対応する列の値がデータベースで計算された場合)。 RowType プロパティには無効です。

Note

Property 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、2 つの子 Property 要素がある EntityType 要素を示しています。

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

PropertyRef 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の PropertyRef 要素では、EntityType 要素に定義されたプロパティを参照して、そのプロパティが次の役割のいずれかを果たすことを示します。

  • EntityType で表されるテーブルの主キーの一部になる。 1 つ以上の PropertyRef 要素を使用して、主キーを定義することができます。 詳細については、「Key 要素」を参照してください。
  • 参照に関する制約の依存 End またはプリンシパル End になる。 詳細については、「ReferentialConstraint 要素」を参照してください。

PropertyRef 要素には、次の子要素のみを含めることができます。

  • Documentation (0 個または 1 個)
  • Annotation 要素

該当する属性

以下の表では、PropertyRef 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前 はい 参照されているプロパティの名前。

Note

PropertyRef 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例は、EntityType 要素に定義されているプロパティを参照することによって主キーを定義するために使用される PropertyRef 要素を示しています。

 <EntityType Name="Customers">
   <Documentation>
     <Summary>Summary here.</Summary>
     <LongDescription>Long description here.</LongDescription>
   </Documentation>
   <Key>
     <PropertyRef Name="CustomerId" />
   </Key>
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
 </EntityType>

ReferentialConstraint 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の ReferentialConstraint 要素は、基になるデータベースの外部キー制約 (参照整合性制約ともいう) を表します。 制約のプリンシパル End と依存 End は、それぞれ Principal 子要素と Dependent 子要素によって指定されます。 プリンシパル End と依存 End に参加する列は、PropertyRef 要素で参照します。

ReferentialConstraint 要素は、Association 要素の省略可能な子要素です。 Association 要素に指定されている外部キー制約のマッピングに ReferentialConstraint 要素が使用されない場合は、AssociationSetMapping 要素を使ってこれを行う必要があります。

ReferentialConstraint 要素には、次の子要素を含めることができます。

  • Documentation (0 個または 1 個)
  • Principal (1 個)
  • Dependent (1 個)
  • Annotation 要素 (0 個以上)

該当する属性

ReferentialConstraint 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、ReferentialConstraint 要素を使用して、FK_CustomerOrders 外部キー制約に関与している列を指定する Association 要素を示します。

 <Association Name="FK_CustomerOrders">
   <End Role="Customers"
        Type="ExampleModel.Store.Customers" Multiplicity="1">
     <OnDelete Action="Cascade" />
   </End>
   <End Role="Orders"
        Type="ExampleModel.Store.Orders" Multiplicity="*" />
   <ReferentialConstraint>
     <Principal Role="Customers">
       <PropertyRef Name="CustomerId" />
     </Principal>
     <Dependent Role="Orders">
       <PropertyRef Name="CustomerId" />
     </Dependent>
   </ReferentialConstraint>
 </Association>

ReturnType 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の ReturnType 要素では、Function 要素で定義される関数の戻り値の型を指定します。 関数の戻り値の型は、ReturnType 属性で指定することもできます。

関数の戻り値の型は、Type 属性または ReturnType 要素を使用して指定されます。

ReturnType 要素には、次の子要素を含めることができます。

  • CollectionType (1 個)

Note

ReturnType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は SSDL 用に予約されたどの XML 名前空間にも属さない場合があります。 カスタム属性の完全修飾名は一意である必要があります。

次の例では、行のコレクションを返す Function を使用します。

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

RowType 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の RowType 要素では、名前のない構造体を、ストアで定義されている関数の戻り値の型として定義します。

RowType 要素は CollectionType 要素の子要素です。

RowType 要素には、次の子要素を含めることができます。

  • Property (1 個以上)

次の例では、CollectionType 要素を使用して、(RowType 要素で指定されているように) 関数から行のコレクションが返されることを指定するストア関数を示します。

   <Function Name="GetProducts" IsComposable="true" Schema="dbo">
     <ReturnType>
       <CollectionType>
         <RowType>
           <Property Name="ProductID" Type="int" Nullable="false" />
           <Property Name="CategoryID" Type="bigint" Nullable="false" />
           <Property Name="ProductName" Type="nvarchar" MaxLength="40" Nullable="false" />
           <Property Name="UnitPrice" Type="money" />
           <Property Name="Discontinued" Type="bit" />
         </RowType>
       </CollectionType>
     </ReturnType>
   </Function>

Schema 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の Schema 要素は、ストレージ モデル定義のルート要素です。 ストレージ モデルを構成するオブジェクト、関数、およびコンテナーの定義を格納します。

Schema 要素には、0 個以上の次の子要素を含めることができます。

  • 関連付け
  • EntityType
  • EntityContainer 要素
  • 機能

Schema 要素では Namespace 属性を使用して、ストレージ モデルでエンティティ型とアソシエーション オブジェクトの名前空間を定義します。 1 つの名前空間内で 2 つのオブジェクトが同じ名前を持つことはできません。

ストレージ モデルの名前空間は、Schema 要素の XML 名前空間とは異なります。 ストレージ モデルの名前空間 (Namespace 属性で定義されている) は、エンティティ型とアソシエーション型の論理コンテナーです。 Schema 要素の XML 名前空間 (xmlns 属性で示される) は、Schema 要素の子要素と属性の既定の名前空間です。 フォーム https://schemas.microsoft.com/ado/YYYY/MM/edm/ssdl (ここで、YYYY と MM はそれぞれ年と月を表します) の XML 名前空間 は SSDL 用に予約されています。 カスタム要素と属性は、このフォームがある名前空間に存在することはできません。

該当する属性

以下の表では、Schema 要素に適用できる属性について説明します。

属性名 必要に応じて Value
名前空間 はい ストレージ モデルの名前空間。 Namespace 属性の値は、型の完全修飾名を形成するために使用されます。 たとえば、Customer という名前の EntityType が ExampleModel.Store 名前空間にある場合、その EntityType の完全修飾名は ExampleModel.Store.Customer となります。
Namespace 属性の値として、SystemTransientEdm という文字列を使用することはできません。 Namespace 属性の値を、CSDL Schema 要素の Namespace 属性の値と同じにすることはできません。
Alias いいえ 名前空間の名前の代わりに使用される識別子。 たとえば、Customer という名前の EntityType が ExampleModel.Store 名前空間にあり、Alias 属性の値が StorageModel である場合は、EntityType の完全修飾名として StorageModel.Customer を使用できます。
プロバイダー はい データ プロバイダー。
ProviderManifestToken はい 返すプロバイダー マニフェストをプロバイダーに示すトークン。 トークンの形式は定義されていません。 トークンの値は、プロバイダーで定義されています。 SQL Server プロバイダー マニフェスト トークンの詳細については、Entity Framework 用 SqlClient を参照してください。

次の例は、1 つの EntityContainer 要素、2 つの EntityType 要素、および 1 つの Association 要素を含む Schema 要素を示しています。

 <Schema Namespace="ExampleModel.Store"
       Alias="Self" Provider="System.Data.SqlClient"
       ProviderManifestToken="2008"
       xmlns="https://schemas.microsoft.com/ado/2009/11/edm/ssdl">
   <EntityContainer Name="ExampleModelStoreContainer">
     <EntitySet Name="Customers"
                EntityType="ExampleModel.Store.Customers"
                Schema="dbo" />
     <EntitySet Name="Orders"
                EntityType="ExampleModel.Store.Orders"
                Schema="dbo" />
     <AssociationSet Name="FK_CustomerOrders"
                     Association="ExampleModel.Store.FK_CustomerOrders">
       <End Role="Customers" EntitySet="Customers" />
       <End Role="Orders" EntitySet="Orders" />
     </AssociationSet>
   </EntityContainer>
   <EntityType Name="Customers">
     <Documentation>
       <Summary>Summary here.</Summary>
       <LongDescription>Long description here.</LongDescription>
     </Documentation>
     <Key>
       <PropertyRef Name="CustomerId" />
     </Key>
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <Property Name="Name" Type="nvarchar(max)" Nullable="false" />
   </EntityType>
   <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
     <Key>
       <PropertyRef Name="OrderId" />
     </Key>
     <Property Name="OrderId" Type="int" Nullable="false"
               c:CustomAttribute="someValue"/>
     <Property Name="ProductId" Type="int" Nullable="false" />
     <Property Name="Quantity" Type="int" Nullable="false" />
     <Property Name="CustomerId" Type="int" Nullable="false" />
     <c:CustomElement>
       Custom data here.
     </c:CustomElement>
   </EntityType>
   <Association Name="FK_CustomerOrders">
     <End Role="Customers"
          Type="ExampleModel.Store.Customers" Multiplicity="1">
       <OnDelete Action="Cascade" />
     </End>
     <End Role="Orders"
          Type="ExampleModel.Store.Orders" Multiplicity="*" />
     <ReferentialConstraint>
       <Principal Role="Customers">
         <PropertyRef Name="CustomerId" />
       </Principal>
       <Dependent Role="Orders">
         <PropertyRef Name="CustomerId" />
       </Dependent>
     </ReferentialConstraint>
   </Association>
   <Function Name="UpdateOrderQuantity"
             Aggregate="false"
             BuiltIn="false"
             NiladicFunction="false"
             IsComposable="false"
             ParameterTypeSemantics="AllowImplicitConversion"
             Schema="dbo">
     <Parameter Name="orderId" Type="int" Mode="In" />
     <Parameter Name="newQuantity" Type="int" Mode="In" />
   </Function>
   <Function Name="UpdateProductInOrder" IsComposable="false">
     <CommandText>
       UPDATE Orders
       SET ProductId = @productId
       WHERE OrderId = @orderId;
     </CommandText>
     <Parameter Name="productId"
                Mode="In"
                Type="int"/>
     <Parameter Name="orderId"
                Mode="In"
                Type="int"/>
   </Function>
 </Schema>

annotation 属性

ストア スキーマ定義言語 (SSDL) の annotation 属性は、ストレージ モデルの要素に関する追加のメタデータを指定するストレージ モデルのカスタム XML 属性です。 有効な XML 構造が必要であることに加え、annotation 属性には次の制約が適用されます。

  • annotation 属性は、SSDL 用に予約された XML 名前空間に存在しない。
  • 2 つの任意の annotation 属性の完全修飾名が同じではない。

複数の annotation 属性を特定の 1 つの SSDL 要素に適用することができる。 annotation 要素に含まれるメタデータには、実行時に System.Data.Metadata.Edm 名前空間のクラスを使用してアクセスできます。

次の例は、OrderId プロパティに annotation 属性が適用されている EntityType 要素を示しています。 この例は、EntityType 要素に追加された annotation 要素も示しています。

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

annotation 要素 (SSDL)

ストア スキーマ定義言語 (SSDL) の annotation 要素は、ストレージ モデルに関する追加のメタデータを指定するストレージ モデルのカスタム XML 要素です。 有効な XML 構造が必要であることに加え、annotation 要素には次の制約が適用されます。

  • annotation 要素は、SSDL 用に予約された XML 名前空間内に存在できません。
  • 2 つの annotation 要素の完全修飾名を同じにすることはできません。
  • annotation 要素は、特定の SSDL 要素のその他すべての子要素より後に指定する必要があります。

複数の annotation 要素を特定の SSDL 要素の子にすることができます。 .NET Framework バージョン 4 以降では、annotation 要素に含まれるメタデータには、実行時に System.Data.Metadata.Edm 名前空間のクラスを使用してアクセスできます。

次の例は、annotation 要素 (CustomElement) を含む EntityType 要素を示しています。 この例は OrderId プロパティに適用される annotation 属性も示しています。

 <EntityType Name="Orders" xmlns:c="http://CustomNamespace">
   <Key>
     <PropertyRef Name="OrderId" />
   </Key>
   <Property Name="OrderId" Type="int" Nullable="false"
             c:CustomAttribute="someValue"/>
   <Property Name="ProductId" Type="int" Nullable="false" />
   <Property Name="Quantity" Type="int" Nullable="false" />
   <Property Name="CustomerId" Type="int" Nullable="false" />
   <c:CustomElement>
     Custom data here.
   </c:CustomElement>
 </EntityType>

ファセット (SSDL)

ストア スキーマ定義言語 (SSDL) のファセットは、Property 要素で指定された列型に対する制約を表します。 ファセットは、Property 要素に XML 属性として実装されます。

次の表では、SSDL でサポートされるファセットについて説明します。

ファセット 説明
Collation プロパティの値に対して比較と順序付け操作を行うときに使用する照合シーケンス (または並べ替え順序) を指定します。
FixedLength 列値の長さを可変とすることができるかどうかを指定します。
MaxLength 列値の最大長を指定します。
[精度] Decimal 型のプロパティには、プロパティ値に含めることができる桁数を指定します。 TimeDateTime、および DateTimeOffset 型のプロパティには、列値の秒の小数部の桁数を指定します。
スケール 列値の小数点の右側の桁数を指定します。
Unicode 列値を Unicode として保存するかどうかを指定します。