CSDL 仕様
[アーティクル] 2024/08/23
10 人の共同作成者
フィードバック
この記事の内容
Association 要素 (CSDL)
AssociationSet 要素 (CSDL)
CollectionType 要素 (CSDL)
ComplexType 要素 (CSDL)
DefiningExpression 要素 (CSDL)
Dependent 要素 (CSDL)
Documentation 要素 (CSDL)
End 要素 (CSDL)
EntityContainer 要素 (CSDL)
EntitySet 要素 (CSDL)
EntityType 要素 (CSDL)
EnumType 要素 (CSDL)
Function 要素 (CSDL)
FunctionImport 要素 (CSDL)
key 要素 (CSDL)
Member 要素 (CSDL)
NavigationProperty 要素 (CSDL)
OnDelete 要素 (CSDL)
Parameter 要素 (CSDL)
Principal 要素 (CSDL)
Property 要素 (CSDL)
PropertyRef 要素 (CSDL)
ReferenceType 要素 (CSDL)
ReferentialConstraint 要素 (CSDL)
ReturnType (Function) 要素 (CSDL)
ReturnType (FunctionImport) 要素 (CSDL)
RowType 要素 (CSDL)
Schema 要素 (CSDL)
TypeRef 要素 (CSDL)
Using 要素 (CSDL)
annotation 属性 (CSDL)
Annotation 要素 (CSDL)
概念モデルの型 (CSDL)
ファセット (CSDL)
さらに 30 個を表示
注意
CSDL v1 はサポートされていません。V3 に更新してください
概念スキーマ定義言語 (CSDL : Conceptual Schema Definition Language) は、XML ベースの言語であり、データ駆動型アプリケーションの概念モデルを構成するエンティティ、リレーションシップ、および関数を記述します。 この概念モデルは、Entity Framework または WCF Data Services で使用できます。 CSDL で記述されるメタデータは、Entity Framework が概念モデルで定義されるエンティティとリレーションシップをデータ ソースにマップするために使用します。 詳しくは、「SSDL 仕様 」および「MSL 仕様 」をご覧ください。
CSDL は、Entity Data Model の Entity Framework での実装です。
Entity Framework アプリケーションでは、概念モデルのメタデータは、.csdl ファイル (CSDL で記述) から System.Data.Metadata.Edm.EdmItemCollection のインスタンスに読み込まれます。このメタデータには、System.Data.Metadata.Edm.MetadataWorkspace クラスのメソッドを使用してアクセスできます。 Entity Framework は、概念モデル メタデータを使用して、概念モデルに対するクエリをデータ ソース固有のコマンドに変換します。
EF デザイナーは、設計時に概念モデル情報を .edmx ファイルに保存します。 EF デザイナーは、ビルド時に .edmx ファイルの情報を使用して .csdl ファイルを作成します。これは、Entity Framework が実行時に必要とするファイルです。
CSDL のバージョンは、XML 名前空間で区別されます。
テーブルを展開する
CSDL のバージョン
XML 名前空間
CSDL v1
https://schemas.microsoft.com/ado/2006/04/edm
CSDL v2
https://schemas.microsoft.com/ado/2008/09/edm
CSDL v3
https://schemas.microsoft.com/ado/2009/11/edm
Association 要素は、2 つのエンティティ型の間のリレーションシップを定義します。 アソシエーションでは、リレーションシップに関連するエンティティ型、およびリレーションシップの各 End におけるエンティティ型の数 (多重度と呼ばれる) を指定する必要があります。 アソシエーション End の多重度には、1 (1)、ゼロか 1 (0..1)、または多数 (*) の値を指定できます。 この情報は、2 つの子 End 要素で指定されます。
アソシエーションの一方の End にあるエンティティ型のインスタンスには、それらがエンティティ型で公開されている場合、ナビゲーション プロパティまたは外部キーからアクセスできます。
アプリケーション内で、アソシエーションのインスタンスは、エンティティ型のインスタンスの間の特定のアソシエーションを表します。 アソシエーション インスタンスは、アソシエーション セットに論理的にグループ化されます。
Association 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
End (2 個の要素のみ)
ReferentialConstraint (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
次の表は、Association 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
アソシエーションの名前。
注意
Association 素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、Customer エンティティ型と Order エンティティ型で外部キーが公開されていない場合に CustomerOrders アソシエーションを定義する Association 要素を示しています。 アソシエーションの各 End の Multiplicity 値は、多数の Orders を 1 個の Customer に関連付けることができることを示していますが、Order に関連付けることができる Customer は、1 個だけです。 さらに、OnDelete 要素は、Customer が削除されると、特定の Customer に関連し、かつ ObjectContext に読み込まれた Orders もすべて共に削除されることを示しています。
<Association Name ="CustomerOrders" >
<End Type ="ExampleModel.Customer" Role ="Customer" Multiplicity ="1" >
<OnDelete Action ="Cascade" />
</End >
<End Type ="ExampleModel.Order" Role ="Order" Multiplicity ="*" />
</Association >
次の例は、Customer エンティティ型と Order エンティティ型で外部キーが公開されている場合に CustomerOrders アソシエーションを定義する Association 要素を示しています。 外部キーが公開されているので、エンティティ間のリレーションシップは ReferentialConstraint 要素で管理されます。 このアソシエーションをデータ ソースにマップするために、対応する AssociationSetMapping 要素は必要ありません。
<Association Name ="CustomerOrders" >
<End Type ="ExampleModel.Customer" Role ="Customer" Multiplicity ="1" >
<OnDelete Action ="Cascade" />
</End >
<End Type ="ExampleModel.Order" Role ="Order" Multiplicity ="*" />
<ReferentialConstraint >
<Principal Role ="Customer" >
<PropertyRef Name ="Id" />
</Principal >
<Dependent Role ="Order" >
<PropertyRef Name ="CustomerId" />
</Dependent >
</ReferentialConstraint >
</Association >
概念スキーマ定義言語 (CSDL) の AssociationSet 要素は、同じ型のアソシエーション インスタンス用の論理コンテナーです。 アソシエーション セットは、複数のアソシエーション インスタンスを 1 つのデータ ソースにマップできるようグループ化する方法を指定します。
AssociationSet 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素を含めることができます)
End (2 つの要素が必要とされます)
Annotation 要素 (0 個以上の要素を含めることができます)
Association 属性は、アソシエーション セットが格納する関連付けの型を指定します。 アソシエーション セットの両端を構成するエンティティ セットは、正確に 2 個の子 End 要素で指定されます。
次の表は、AssociationSet 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
エンティティ セットの名前。 Name 属性の値と Association 属性の値を同じにすることはできません。
関連付け
はい
関連付けの完全修飾名。そのインスタンスは、アソシエーション セットに格納されます。 関連付けは、アソシエーション セットと同じ名前空間に存在する必要があります。
注意
AssociationSet 素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、2 つの AssociationSet 要素を持つ EntityContainer 要素を示しています。
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Books" EntityType ="BooksModel.Book" />
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
<EntitySet Name ="Authors" EntityType ="BooksModel.Author" />
<AssociationSet Name ="PublishedBy" Association ="BooksModel.PublishedBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Publisher" EntitySet ="Publishers" />
</AssociationSet >
<AssociationSet Name ="WrittenBy" Association ="BooksModel.WrittenBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Author" EntitySet ="Authors" />
</AssociationSet >
</EntityContainer >
概念スキーマ定義言語 (CSDL) の CollectionType 要素は、関数パラメーターまたは関数の戻り値の型がコレクションであることを指定します。 CollectionType 要素は、Parameter 要素または ReturnType (Function) 要素の子である場合があります。 コレクションの型は、Type 属性で指定することも、次のいずれかの子要素で指定することもできます。
CollectionType
ReferenceType
RowType
TypeRef
注意
Type 属性と子要素の両方でコレクションの型を指定すると、モデルの検証は行われません。
CollectionType 要素に適用できる属性を次の表に示します。 CollectionType 属性、MaxLength 属性、FixedLength 属性、Precision 属性、Scale 属性、Unicode 属性、Collation 属性は、EDMSimpleTypes のコレクションのみに適用されることに注意してください。
テーブルを展開する
属性名
必要に応じて
値
Type
いいえ
コレクションの種類です。
NULL 値の使用
いいえ
プロパティに null 値を指定できるかどうかに応じて、True (既定値) または False 。 [!注意]
> CSDL v1 では、複合型プロパティに Nullable="False"
が必要です。
DefaultValue
いいえ
プロパティの既定値です。
MaxLength
いいえ
プロパティ値の最大長。
FixedLength
いいえ
プロパティ値が固定長の文字列として格納されるかどうかにより、True または False 。
[精度]
いいえ
プロパティ値の有効桁数。
スケール
いいえ
プロパティ値の小数点以下桁数。
SRID
いいえ
空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください
Unicode
いいえ
プロパティ値が Unicode 文字列として格納されるかどうかにより、True または False 。
Collation
いいえ
データ ソースで使用される照合順序を指定する文字列。
注意
CollectionType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、CollectionType 要素を使用して、関数で Person エンティティ型のコレクション (ElementType 属性で指定) が返されることを指定するモデル定義関数を示しています。
<Function Name ="LastNamesAfter" >
<Parameter Name ="someString" Type ="Edm.String" />
<ReturnType >
<CollectionType ElementType ="SchoolModel.Person" />
</ReturnType >
<DefiningExpression >
SELECT VALUE p
FROM SchoolEntities.People AS p
WHERE p.LastName >= someString
</DefiningExpression >
</Function >
次の例は、CollectionType 要素を使用して、関数で行のコレクション (RowType 要素で指定) が返されることを指定するモデル定義関数を示しています。
<Function Name ="LastNamesAfter" >
<Parameter Name ="someString" Type ="Edm.String" />
<ReturnType >
<CollectionType >
<RowType >
<Property Name ="FirstName" Type ="Edm.String" Nullable ="false" />
<Property Name ="LastName" Type ="Edm.String" Nullable ="false" />
</RowType >
</CollectionType >
</ReturnType >
<DefiningExpression >
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression >
</Function >
次の例は、CollectionType 要素を使用して、関数で Department エンティティ型のコレクションをパラメーターとして受け入れることを指定するモデル定義関数を示しています。
<Function Name ="GetAvgBudget" >
<Parameter Name ="Departments" >
<CollectionType >
<TypeRef Type ="SchoolModel.Department" />
</CollectionType >
</Parameter >
<ReturnType Type ="Collection(Edm.Decimal)" />
<DefiningExpression >
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression >
</Function >
ComplexType 要素は、EdmSimpleType プロパティまたは他の複合型で構成されるデータ構造を定義します。 複合型は、エンティティ型または別の複合型のプロパティにすることができます。 複合型は、データを定義するという点でエンティティ型に似ています。 ただし、複合型とエンティティ型の間にはいくつかの重要な違いがあります。
複合型には ID (またはキー) がないため、独立して存在することができません。 複合型は、エンティティ型またはその他の複合型のプロパティとしてのみ存在できます。
複合型は、アソシエーションに参加できません。 アソシエーションのいずれの End にも複合型を指定できないため、複合型にはナビゲーション プロパティを定義できません。
複合型のスカラー プロパティはそれぞれ null に設定できますが、複合型のプロパティには null 値を指定できません。
ComplexType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Property (0 個以上の要素)
Annotation 要素 (0 個以上の要素)
次の表は、ComplexType 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
複合型の名前。 複合型の名前は、モデルのスコープ内にある別の複合型、エンティティ型、またはアソシエーションの名前と同じにすることはできません。
BaseType
いいえ
定義される複合型の基本データ型である、別の複合型の名前。 [!注意]
> この属性は CSDL v1 では適用できません。 複合型の継承は、このバージョンではサポートされません。
要約
いいえ
複合型が抽象型かどうかにより、True または False (既定値)。 [!注意]
> この属性は CSDL v1 では適用できません。 このバージョンの複合型を抽象型にすることはできません。
注意
ComplexType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、StreetAddress 、City 、StateOrProvince 、Country 、PostalCode の EdmSimpleType プロパティの複合型 Address を示しています。
<ComplexType Name ="Address" >
<Property Type ="String" Name ="StreetAddress" Nullable ="false" />
<Property Type ="String" Name ="City" Nullable ="false" />
<Property Type ="String" Name ="StateOrProvince" Nullable ="false" />
<Property Type ="String" Name ="Country" Nullable ="false" />
<Property Type ="String" Name ="PostalCode" Nullable ="false" />
</ComplexType >
エンティティ型のプロパティとして複合型 Address (上記) を定義するには、エンティティ型の定義でプロパティの型を宣言する必要があります。 次の例は、エンティティ型 (Publisher ) の複合型である Address プロパティを示しています。
<EntityType Name ="Publisher" >
<Key >
<PropertyRef Name ="Id" />
</Key >
<Property Type ="Int32" Name ="Id" Nullable ="false" />
<Property Type ="String" Name ="Name" Nullable ="false" />
<Property Type ="BooksModel.Address" Name ="Address" Nullable ="false" />
<NavigationProperty Name ="Books" Relationship ="BooksModel.PublishedBy"
FromRole ="Publisher" ToRole ="Book" />
</EntityType >
DefiningExpression 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の DefiningExpression 要素には、概念モデルで関数を定義する Entity SQL 式が含まれています。
注意
検証を行うため、DefiningExpression 要素に任意の内容を含めることができます。 ただし、DefiningExpression 要素に有効な Entity SQL が含まれていない場合、Entity Framework は実行時に例外をスローします。
DefiningExpression 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、ある本が出版されてからの年数を返す関数の定義に DefiningExpression 要素を使用しています。 DefiningExpression 要素の内容は Entity SQL で作成されます。
<Function Name ="GetYearsInPrint" ReturnType ="Edm.Int32" >
<Parameter Name ="book" Type ="BooksModel.Book" />
<DefiningExpression >
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression >
</Function >
概念スキーマ定義言語 (CSDL) の Dependent 要素は、ReferentialConstraint 要素の子要素であり、参照制約の依存 End を定義します。 ReferentialConstraint 要素は、リレーショナル データベースの参照整合性制約と同様の機能を定義します。 データベース テーブルの列が別のテーブルの主キーを参照できるのと同じように、エンティティ型のプロパティが別のエンティティ型のエンティティ キーを参照できます。 参照されるエンティティ型は、制約の "プリンシパル End " と呼ばれます。 プリンシパル End を参照するエンティティ型は、制約の "依存 End " と呼ばれます。 PropertyRef 要素は、プリンシパル End を参照するキーを指定するために使用されます。
Dependent 要素には、次の子要素を (リストされている順序で) 含めることができます。
PropertyRef (1 個以上の要素)
Annotation 要素 (0 個以上の要素)
次の表は、Dependent 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
役割
はい
アソシエーションの依存 End 上のエンティティ型の名前。
注意
Dependent 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、ReferentialConstraint 要素を PublishedBy アソシエーションの定義の一部として使用する方法を示します。 Book エンティティ型の PublisherId プロパティは、参照制約の依存 End を構成します。
<Association Name ="PublishedBy" >
<End Type ="BooksModel.Book" Role ="Book" Multiplicity ="*" >
</End >
<End Type ="BooksModel.Publisher" Role ="Publisher" Multiplicity ="1" />
<ReferentialConstraint >
<Principal Role ="Publisher" >
<PropertyRef Name ="Id" />
</Principal >
<Dependent Role ="Book" >
<PropertyRef Name ="PublisherId" />
</Dependent >
</ReferentialConstraint >
</Association >
概念スキーマ定義言語 (CSDL) の Documentation 要素は、親要素で定義されたオブジェクトに関する情報の提供に使用できます。 .edmx ファイルでは、Documentation 要素が、EF デザイナーのデザイン サーフェイスにオブジェクト (エンティティ、アソシエーション、プロパティなど) として表示される要素の子である場合、Documentation 要素の内容が Visual Studio のそのオブジェクトの [プロパティ] ウィンドウに表示されます。
Documentation 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Summary : 親要素の簡単な説明 (0 個または 1 個の要素)。
LongDescription : 親要素の詳細な説明 (0 個または 1 個の要素)。
Annotation 要素。 (0 個以上の要素)。
Documentation 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、EntityType 要素の子要素として Documentation 要素が示されています。 次のスニペットが .edmx ファイルの CSDL の内容に含まれていた場合、Customer
エンティティ型をクリックすると、Summary 要素と LongDescription 要素の内容が、Visual Studio の [プロパティ] ウィンドウに表示されます。
<EntityType Name ="Customer" >
<Documentation >
<Summary > Summary here.</Summary >
<LongDescription > Long description here.</LongDescription >
</Documentation >
<Key >
<PropertyRef Name ="CustomerId" />
</Key >
<Property Type ="Int32" Name ="CustomerId" Nullable ="false" />
<Property Type ="String" Name ="Name" Nullable ="false" />
</EntityType >
概念スキーマ定義言語 (CSDL: Conceptual Schema Definition Language) の End 要素は、Association 要素または AssociationSet 要素の子にすることができます。 それぞれの場合において、End 要素の役割は異なっており、該当する属性も異なります。
Association 要素の子としての End 要素
End 要素 (Association 要素の子として) は、アソシエーションの一方の End にあるエンティティ型と、アソシエーションのその End に存在できるエンティティ型のインスタンス数を特定します。 アソシエーション End はアソシエーションの一部として定義され、アソシエーションには必ず 2 つのアソシエーション End が必要です。 アソシエーションの一方の End にあるエンティティ型のインスタンスには、それらがエンティティ型で公開されている場合、ナビゲーション プロパティまたは外部キーからアクセスできます。
End 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
OnDelete (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
次の表では、End 要素が Association 要素の子である場合に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
値
Type
はい
アソシエーションの一方の End のエンティティ型の名前。
役割
いいえ
アソシエーション End の名前。 名前が指定されない場合、アソシエーション End のエンティティ型の名前が使用されます。
カーディナリティ
はい
アソシエーション End に存在できるエンティティ型のインスタンス数に応じて、1 、0..1 、または * のいずれか。 1 は、アソシエーション End に 1 個のエンティティ型インスタンスが存在することを示します。 0..1 は、アソシエーション End に 0 個か 1 個のエンティティ型インスタンスが存在することを示します。 * は、アソシエーション End に 0 個、1 個、または複数個のエンティティ型インスタンスが存在することを示します。
注意
End 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、CustomerOrders アソシエーションを定義する Association 要素を示します。 アソシエーションの各 End の Multiplicity 値は、多数の Orders を 1 個の Customer に関連付けることができることを示していますが、Order に関連付けることができる Customer は、1 個だけです。 さらに、OnDelete 要素は、Customer が削除されると、特定の Customer に関連し、かつ ObjectContext に読み込まれた Orders もすべて共に削除されることを示しています。
<Association Name ="CustomerOrders" >
<End Type ="ExampleModel.Customer" Role ="Customer" Multiplicity ="1" />
<End Type ="ExampleModel.Order" Role ="Order" Multiplicity ="*" >
<OnDelete Action ="Cascade" />
</End >
</Association >
AssociationSet 要素の子としての End 要素
End 要素は、アソシエーション セットの 1 つの End を指定します。 AssociationSet 要素には、2 個の End 要素が含まれている必要があります。 End 要素に格納されている情報は、アソシエーション セットをデータ ソースにマップするときに使用されます。
End 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
注意
Annotation 要素は、それ以外のすべての子要素より後に指定する必要があります。 Annotation 要素は、CSDL v2 以降でのみ使用できます。
次の表では、End 要素が AssociationSet 要素の子である場合に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
EntitySet
はい
親 AssociationSet 要素の 1 つの End を定義する EntitySet 要素の名前。 EntitySet 要素は、親 AssociationSet 要素と同じエンティティ コンテナー内で定義されている必要があります。
役割
いいえ
アソシエーション セット End の名前。 Role 属性が使用されない場合、アソシエーション セット End の名前がエンティティ セット名になります。
注意
End 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、それぞれ 2 個の End 要素を含む 2 個の AssociationSet 要素を持つ EntityContainer 要素を示しています。
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Books" EntityType ="BooksModel.Book" />
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
<EntitySet Name ="Authors" EntityType ="BooksModel.Author" />
<AssociationSet Name ="PublishedBy" Association ="BooksModel.PublishedBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Publisher" EntitySet ="Publishers" />
</AssociationSet >
<AssociationSet Name ="WrittenBy" Association ="BooksModel.WrittenBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Author" EntitySet ="Authors" />
</AssociationSet >
</EntityContainer >
EntityContainer 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の EntityContainer 要素は、エンティティ セット、アソシエーション セット、および関数インポートの論理コンテナーです。 概念モデルのエンティティ コンテナーは、EntityContainerMapping 要素を通じてストレージ モデルのエンティティ コンテナーにマップされます。 ストレージ モデルのエンティティ コンテナーは、データベースの構造を記述します。エンティティ セットはデータベースのテーブル、アソシエーション セットは外部キー、関数インポートはストアド プロシージャをそれぞれ記述します。
EntityContainer 要素には、0 個または 1 個の Documentation 要素を含めることができます。 Documentation 要素が存在する場合、その位置は、どの EntitySet 要素、AssociationSet 要素、FunctionImport 要素よりも前でなければなりません。
EntityContainer 要素には、(ここで示す順序で) 次の子要素を 0 個以上含めることができます。
EntitySet
AssociationSet
FunctionImport 要素
Annotation 要素
EntityContainer 要素を拡張して、同じ名前空間内にある別の EntityContainer の内容を格納することができます。 別の EntityContainer の内容を参照元 EntityContainer 要素に格納するには、Extends 属性の値を格納する EntityContainer 要素の名前に設定します。 格納された EntityContainer 要素の子要素はすべて、参照元 EntityContainer 要素の子要素として扱われます。
次の表は、Using 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
エンティティ コンテナー名。
Extends
いいえ
同じ名前空間内にある別のエンティティ コンテナーの名前
注意
EntityContainer 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例に、3 つのエンティティ セットと 2 つのアソシエーション セットを定義する EntityContainer 要素を示します。
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Books" EntityType ="BooksModel.Book" />
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
<EntitySet Name ="Authors" EntityType ="BooksModel.Author" />
<AssociationSet Name ="PublishedBy" Association ="BooksModel.PublishedBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Publisher" EntitySet ="Publishers" />
</AssociationSet >
<AssociationSet Name ="WrittenBy" Association ="BooksModel.WrittenBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Author" EntitySet ="Authors" />
</AssociationSet >
</EntityContainer >
概念スキーマ定義言語の EntitySet 要素は、エンティティ型のインスタンス、およびそのエンティティ型から派生した任意の型のインスタンスの論理コンテナーです。 エンティティ型とエンティティ セットの間のリレーションシップは、リレーショナル データベースの行とテーブルの間のリレーションシップと似ています。 エンティティ型は、行と同様に関連データのセットを定義し、エンティティ セットには、テーブルと同様に、その定義のインスタンスが含まれます。 エンティティ セットは、エンティティ型のインスタンスをグループ化するための構造を提供します。これにより、データ ソース内の関連するデータ構造に、エンティティ型のインスタンスをマッピングできるようになります。
特定のエンティティ型に対して複数のエンティティ セットを定義できます。
注意
EF デザイナーでは、型ごとに複数のエンティティ セットを含んでいる概念モデルはサポートされません。
EntitySet 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation 要素 (0 個または 1 個の要素を含めることができます)
Annotation 要素 (0 個以上の要素を含めることができます)
次の表は、EntitySet 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
エンティティ セットの名前。
EntityType
はい
エンティティ型の完全修飾名。そのインスタンスは、エンティティ セットに格納されます。
注意
EntitySet 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、3 つの EntitySet 要素を持つ EntityContainer 要素を示しています。
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Books" EntityType ="BooksModel.Book" />
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
<EntitySet Name ="Authors" EntityType ="BooksModel.Author" />
<AssociationSet Name ="PublishedBy" Association ="BooksModel.PublishedBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Publisher" EntitySet ="Publishers" />
</AssociationSet >
<AssociationSet Name ="WrittenBy" Association ="BooksModel.WrittenBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Author" EntitySet ="Authors" />
</AssociationSet >
</EntityContainer >
型ごとに複数のエンティティ セット (Multiple-Entity-Sets-per-Type: MEST) を定義できます。 次の例は、Book エンティティ型の 2 つのエンティティ セットを持つエンティティ コンテナーを定義します。
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Books" EntityType ="BooksModel.Book" />
<EntitySet Name ="FictionBooks" EntityType ="BooksModel.Book" />
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
<EntitySet Name ="Authors" EntityType ="BooksModel.Author" />
<AssociationSet Name ="PublishedBy" Association ="BooksModel.PublishedBy" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Publisher" EntitySet ="Publishers" />
</AssociationSet >
<AssociationSet Name ="BookAuthor" Association ="BooksModel.BookAuthor" >
<End Role ="Book" EntitySet ="Books" />
<End Role ="Author" EntitySet ="Authors" />
</AssociationSet >
</EntityContainer >
EntityType 要素は、概念モデルのトップレベル概念 (顧客や発注など) の構造を表します。 エンティティ型は、アプリケーションのエンティティ型インスタンス用テンプレートです。 各テンプレートには、次の情報が含まれています。
一意の名前 (必須)
1 つ以上のプロパティにより定義されるエンティティ キー (必須)
データ格納用のプロパティ (省略可能)
アソシエーションの 1 つの End から別の End へのナビゲーションを可能にするナビゲーション プロパティ。 (省略可能)
アプリケーションでは、エンティティ型のインスタンスが特定のオブジェクト (特定の顧客や注文など) を表します。 エンティティ型の各インスタンスに対して、エンティティ セット内のエンティティ キーを一意にする必要があります。
2 つのエンティティ型のインスタンスは、型が同じであり、エンティティ キーの値が等しい場合にのみ、等価のインスタンスと見なされます。
EntityType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Key (0 個または 1 個の要素)
Property (0 個以上の要素)
NavigationProperty (0 個以上の要素)
Annotation 要素 (0 個以上の要素)
以下の表では、EntityType 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
エンティティ タイプの名前。
BaseType
いいえ
定義するエンティティ型の基本の型である別のエンティティ型の名前。
要約
いいえ
エンティティ型が抽象型かどうかに応じて、True または False 。
OpenType
いいえ
エンティティ型がオープンなエンティティ型かどうかに応じて、True または False 。 [!注意]
>OpenType 属性が適用されるのは、ADO.NET Data Services で使用される概念モデルで定義されるエンティティ型だけです。
注意
EntityType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、3 個の Property 要素と 2 個の NavigationProperty 要素を持つ EntityType 要素を示します。
<EntityType Name ="Book" >
<Key >
<PropertyRef Name ="ISBN" />
</Key >
<Property Type ="String" Name ="ISBN" Nullable ="false" />
<Property Type ="String" Name ="Title" Nullable ="false" />
<Property Type ="Decimal" Name ="Revision" Nullable ="false" Precision ="29" Scale ="29" />
<NavigationProperty Name ="Publisher" Relationship ="BooksModel.PublishedBy"
FromRole ="Book" ToRole ="Publisher" />
<NavigationProperty Name ="Authors" Relationship ="BooksModel.WrittenBy"
FromRole ="Book" ToRole ="Author" />
</EntityType >
EnumType 要素は列挙型を表します。
EnumType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Member (0 個以上の要素)
Annotation 要素 (0 個以上の要素)
次の表は、EnumType 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
エンティティ タイプの名前。
IsFlags
いいえ
列挙型をフラグのセットとして使用できるかどうかに応じて、True または False 。 既定値は False です。
UnderlyingType
いいえ
Edm.Byte 、Edm.Int16 、Edm.Int32 、Edm.Int64 、または Edm.SByte 。型の値の範囲を定義します。 列挙要素の基になる既定の型は Edm.Int32 です。
注意
EnumType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、3 つの Member 要素を持つ EnumType 要素を示しています。
<EnumType Name ="Color" IsFlags =”false” UnderlyingTyp =”Edm.Byte” >
<Member Name ="Red" />
<Member Name ="Green" />
<Member Name ="Blue" />
</EntityType >
概念スキーマ定義言語 (CSDL) の Function 要素は、概念モデルで関数を定義または宣言するために使用します。 関数は、DefiningExpression 要素を使用して定義されます。
Function 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Parameter (0 個以上の要素)
DefiningExpression (0 個または 1 個の要素)
ReturnType (Function) (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
関数の戻り値の型は、ReturnType (Function) 要素と ReturnType 属性の両方ではなく、いずれかを使用して指定する必要があります (下記参照)。 有効な戻り値の型には、EdmSimpleType、エンティティ型、複合型、行型、または参照型 (あるいはこれらの型のいずれかのコレクション) があります。
次の表は、Function 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
関数の名前です。
ReturnType
いいえ
関数の戻り値の型。
注意
Function 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、インストラクターが雇用されてから経過した年数を返す関数の定義に Function 要素を使用しています。
<Function Name ="YearsSince" ReturnType ="Edm.Int32" >
<Parameter Name ="date" Type ="Edm.DateTime" />
<DefiningExpression >
Year(CurrentDateTime()) - Year(date)
</DefiningExpression >
</Function >
概念スキーマ定義言語 (CSDL) の FunctionImport 要素は、データ ソース内で定義され、オブジェクトが概念モデルを通じて使用できる関数を表します。 たとえば、ストレージ モデルの Function 要素を使用して、データベース内のストアド プロシージャを表すことができます。 概念モデルの FunctionImport 要素は、Entity Framework アプリケーションの対応する関数を表しており、FunctionImportMapping 要素を使用することでストレージ モデル関数にマップされます。 関数がアプリケーションで呼び出されると、対応するストアド プロシージャがデータベースで実行されます。
FunctionImport 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素を含めることができます)
Parameter (0 個以上の要素を含めることができます)
Annotation 要素 (0 個以上の要素を含めることができます)
ReturnType (FunctionImport) (0 個以上の要素を含めることができます)
関数が受け取る各パラメーターに対して、Parameter 要素を 1 つ定義する必要があります。
関数の戻り値の型は、ReturnType (FunctionImport) 要素と ReturnType 属性の両方ではなく、いずれかを使用して指定する必要があります (下記参照)。 戻り値の型の値は、EdmSimpleType、EntityType、または ComplexType のコレクションである必要があります。
次の表は、FunctionImport 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
インポートされる関数の名前。
ReturnType
いいえ
関数が返す型。 関数が値を返さない場合は、この属性を使用しないでください。 それ以外の場合は ComplexType、EntityType、EDMSimpleType のコレクションである必要があります。
EntitySet
いいえ
関数がエンティティ型のコレクションを返す場合、EntitySet の値は、コレクションが所属するエンティティ セットである必要があります。 そうでない場合は、 EntitySet 属性を使用しないでください。
IsComposable
いいえ
値が true に設定されている場合、関数はコンポーザブル (テーブル値関数) であり、LINQ クエリで使用できます。 既定値は false です。
注意
FunctionImport 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、パラメーターを 1 つ受け取ってエンティティ型のコレクションを返す FunctionImport 要素を示します。
<FunctionImport Name ="GetStudentGrades"
EntitySet ="StudentGrade"
ReturnType ="Collection(SchoolModel.StudentGrade)" >
<Parameter Name ="StudentID" Mode ="In" Type ="Int32" />
</FunctionImport >
Key 要素は、EntityType 要素の子要素であり、エンティティ キー (アイデンティティを決定するエンティティ型のプロパティまたはプロパティ セット) を定義します。 エンティティ キーを構成するプロパティは、デザイン時に選択されます。 エンティティ キー プロパティの値では、実行時のエンティティ セット内のエンティティ型のインスタンスが一意に識別される必要があります。 エンティティ キーを構成するプロパティには、エンティティ セット内のインスタンスの一意性を保証するものを選択する必要があります。 Key 要素は、エンティティ型の 1 つ以上のプロパティを参照することで、エンティティ キーを定義します。
Key 要素には、次の子要素を含めることができます。
PropertyRef (1 個以上の要素)
Annotation 要素 (0 個以上の要素)
Key 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
下の例は、Book という名前のエンティティ型を定義します。 エンティティ キーは、エンティティ型の ISBN プロパティを参照して定義されています。
<EntityType Name ="Book" >
<Key >
<PropertyRef Name ="ISBN" />
</Key >
<Property Type ="String" Name ="ISBN" Nullable ="false" />
<Property Type ="String" Name ="Title" Nullable ="false" />
<Property Type ="Decimal" Name ="Revision" Nullable ="false" Precision ="29" Scale ="29" />
<NavigationProperty Name ="Publisher" Relationship ="BooksModel.PublishedBy"
FromRole ="Book" ToRole ="Publisher" />
<NavigationProperty Name ="Authors" Relationship ="BooksModel.WrittenBy"
FromRole ="Book" ToRole ="Author" />
</EntityType >
国際標準図書番号 (ISBN) は書籍を一意に識別するものであるため、ISBN プロパティは、エンティティ キーに適しています。
次の例は、Name および Address という 2 つのプロパティで構成されるエンティティ キーを持つエンティティ型 (Author ) を示しています。
<EntityType Name ="Author" >
<Key >
<PropertyRef Name ="Name" />
<PropertyRef Name ="Address" />
</Key >
<Property Type ="String" Name ="Name" Nullable ="false" />
<Property Type ="String" Name ="Address" Nullable ="false" />
<NavigationProperty Name ="Books" Relationship ="BooksModel.WrittenBy"
FromRole ="Author" ToRole ="Book" />
</EntityType >
同じ名前の 2 人の著者が同じ住所に住む可能性は低いため、エンティティ キーに Name および Address を使用するのは妥当な選択になります。 ただし、エンティティ キーのこの選択では、エンティティ セット内のエンティティ キーの一意性を絶対的に保証することはできません。 この場合には、AuthorId などのプロパティを追加して、著者を一意に識別することが推奨されます。
Member 要素は EnumType 要素の子要素であり、列挙型のメンバーを定義します。
次の表は、FunctionImport 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
メンバーの名前。
Value
いいえ
メンバーの値。 既定では、最初のメンバーの値は 0 で、後続の列挙子の値は 1 ずつ増加していきます。 同じ値を持つ複数のメンバーが存在する可能性があります。
注意
FunctionImport 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、3 つの Member 要素を持つ EnumType 要素を示しています。
<EnumType Name ="Color" >
<Member Name ="Red" Value =”1”/ >
<Member Name ="Green" Value =”3” />
<Member Name ="Blue" Value =”5”/ >
</EntityType >
NavigationProperty 要素 (CSDL)
NavigationProperty 要素は、ナビゲーション プロパティを定義します。このプロパティは、アソシエーションの他方の End を参照できるようにします。 Property 要素で定義されるプロパティとは異なり、ナビゲーション プロパティはデータの形と特性を定義しません。 ナビゲーション プロパティは、アソシエーション内で 2 つのエンティティ型間を移動するための手段を提供します。
ナビゲーション プロパティは、アソシエーション End の両方のエンティティ型で省略可能です。 1 つのアソシエーション End のエンティティ型にナビゲーション プロパティを定義した場合に、そのアソシエーションの他方の End でもエンティティ型にナビゲーション プロパティを定義する必要はありません。
ナビゲーション プロパティによって返されるデータ型は、リモートのアソシエーション End の多重度により決まります。 たとえば、ナビゲーション プロパティ OrdersNavProp が Customer エンティティ型に存在し、Customer と Order の間の一対多のアソシエーションで移動するとします。 ナビゲーション プロパティのリモートのアソシエーション End の多重度が多数 (*) であるため、そのデータ型は (Order の) コレクションになります。 同様に、Order エンティティ型にナビゲーション プロパティ CustomerNavProp が存在する場合、リモート End の多重度が (1) であるため、データ型は Customer になります。
NavigationProperty 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
以下の表では、NavigationProperty 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
ナビゲーション プロパティの名前。
リレーションシップ
はい
モデルのスコープ内にあるアソシエーションの名前。
ToRole
はい
ナビゲーションが終了する側のアソシエーション End。 ToRole 属性の値は、いずれかのアソシエーション End で定義されているいずれかの Role 属性の値 (AssociationEnd 要素で定義) と同じである必要があります。
FromRole
はい
ナビゲーションが始まる側のアソシエーション End。 FromRole 属性の値は、いずれかのアソシエーション End で定義されているいずれかの Role 属性の値 (AssociationEnd 要素で定義) と同じである必要があります。
注意
NavigationProperty 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、2 つのナビゲーション プロパティ (PublishedBy と WrittenBy ) を持つエンティティ型 (Book ) を定義します。
<EntityType Name ="Book" >
<Key >
<PropertyRef Name ="ISBN" />
</Key >
<Property Type ="String" Name ="ISBN" Nullable ="false" />
<Property Type ="String" Name ="Title" Nullable ="false" />
<Property Type ="Decimal" Name ="Revision" Nullable ="false" Precision ="29" Scale ="29" />
<NavigationProperty Name ="Publisher" Relationship ="BooksModel.PublishedBy"
FromRole ="Book" ToRole ="Publisher" />
<NavigationProperty Name ="Authors" Relationship ="BooksModel.WrittenBy"
FromRole ="Book" ToRole ="Author" />
</EntityType >
概念スキーマ定義言語 (CSDL) の OnDelete 要素は、アソシエーションと関係のある動作を定義します。 Action 属性が、アソシエーションの一方の End で Cascade に設定されている場合、その End にあるエンティティ型が削除されると、アソシエーションの他方の End で関連付けられているエンティティ型も削除されます。 2 つのエンティティ型間のアソシエーションが主キーと主キーのリレーションシップである場合、アソシエーションの他方の End にあるプリンシパル オブジェクトが削除されると、OnDelete の指定にかかわらず、読み込まれた依存オブジェクトも削除されます。
注意
OnDelete 要素が影響を及ぼすのは、アプリケーションの実行時の動作だけです。データ ソースでの動作には影響を及ぼしません。 データ ソースで定義された動作は、アプリケーションで定義された動作と同じである必要があります。
OnDelete 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
次の表は、OnDelete 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
操作
はい
Cascade または None 。 Cascade の場合、プリンシパル エンティティ型が削除されると、依存エンティティ型も削除されます。 None の場合、プリンシパル エンティティ型が削除されても、依存エンティティ型は削除されません。
注意
Association 素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、CustomerOrders アソシエーションを定義する Association 要素を示します。 OnDelete 要素は、Customer が削除されると、特定の Customer に関連し、かつ ObjectContext に読み込まれた Orders もすべて共に削除されることを示しています。
<Association Name ="CustomerOrders" >
<End Type ="ExampleModel.Customer" Role ="Customer" Multiplicity ="1" >
<OnDelete Action ="Cascade" />
</End >
<End Type ="ExampleModel.Order" Role ="Order" Multiplicity ="*" />
</Association >
概念スキーマ定義言語 (CSDL) の Parameter 要素は、FunctionImport 要素または Function 要素の子にすることができます。
FunctionImport 要素のアプリケーション
Parameter 要素 (FunctionImport 要素の子として) は、CSDL で宣言される関数インポートの入力パラメーターと出力パラメーターを定義するために使用されます。
Parameter 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素を含めることができます)
Annotation 要素 (0 個以上の要素を含めることができます)
次の表では、Parameter 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
パラメーターの名前。
Type
はい
パラメーターの型。 この値には、 EDMSimpleType か、モデルのスコープ内にある複合型を指定する必要があります。
モード
いいえ
パラメーターが入力、出力、あるいは入力/出力パラメーターであるかに応じて、In 、Out 、または InOut 。
MaxLength
いいえ
パラメーターの許容される最大長
[精度]
いいえ
パラメーターの説明
スケール
いいえ
パラメーターの小数点以下桁数
SRID
いいえ
空間システム参照識別子。 空間型のパラメーターにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
注意
Parameter 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、1 つの Parameter 子要素を持つ FunctionImport 要素を示しています。 関数は、1 つの入力パラメーターを受け取り、エンティティ型のコレクションを返します。
<FunctionImport Name ="GetStudentGrades"
EntitySet ="StudentGrade"
ReturnType ="Collection(SchoolModel.StudentGrade)" >
<Parameter Name ="StudentID" Mode ="In" Type ="Int32" />
</FunctionImport >
Parameter 要素 (Function 要素の子要素として) は、概念モデルで定義または宣言される関数のパラメーターを定義します。
Parameter 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
CollectionType (0 個または 1 個の要素)
ReferenceType (0 個または 1 個の要素)
RowType (0 個または 1 個の要素)
注意
Property 要素の子要素にできるのは、CollectionType 、ReferenceType 、または RowType のうち 1 つだけです。
Annotation 要素 (0 個以上の要素を含めることができます)
注意
Annotation 要素は、それ以外のすべての子要素より後に指定する必要があります。 Annotation 要素は、CSDL v2 以降でのみ使用できます。
次の表では、Parameter 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
パラメーターの名前。
Type
いいえ
パラメーターの型。 パラメーターには次のいずれかの型 (またはこれらの型のコレクション) を使用できます。 EdmSimpleType エンティティ型 複合型 行型 受信者のタイプ
NULL 値の使用
いいえ
プロパティに null 値を割り当てることができるかどうかにより、True (既定値) または False 。
DefaultValue
いいえ
プロパティの既定値です。
MaxLength
いいえ
プロパティ値の最大長。
FixedLength
いいえ
プロパティ値が固定長の文字列として格納されるかどうかにより、True または False 。
[精度]
いいえ
プロパティ値の有効桁数。
スケール
いいえ
プロパティ値の小数点以下桁数。
SRID
いいえ
空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
Unicode
いいえ
プロパティ値が Unicode 文字列として格納されるかどうかにより、True または False 。
Collation
いいえ
データ ソースで使用される照合順序を指定する文字列。
注意
Parameter 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、1 個の Parameter 子要素を使用して関数パラメーターを定義する Function 要素を示します。
<Function Name ="GetYearsEmployed" ReturnType ="Edm.Int32" >
<Parameter Name ="Instructor" Type ="SchoolModel.Person" />
<DefiningExpression >
Year(CurrentDateTime()) - Year(cast(Instructor.HireDate as DateTime))
</DefiningExpression >
</Function >
概念スキーマ定義言語 (CSDL) の Principal 要素は、ReferentialConstraint 要素の子要素であり、参照制約のプリンシパル End を定義します。 ReferentialConstraint 要素は、リレーショナル データベースの参照整合性制約と同様の機能を定義します。 データベース テーブルの列が別のテーブルの主キーを参照できるのと同じように、エンティティ型のプロパティが別のエンティティ型のエンティティ キーを参照できます。 参照されるエンティティ型は、制約の "プリンシパル End " と呼ばれます。 プリンシパル End を参照するエンティティ型は、制約の "依存 End " と呼ばれます。 PropertyRef 要素は、依存 End によって参照されるキーを指定するために使用されます。
Principal 要素には、次の子要素を (ここで示す順序で) 含めることができます。
PropertyRef (1 個以上の要素)
Annotation 要素 (0 個以上の要素)
次の表では、Principal 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
役割
はい
アソシエーションのプリンシパル End 上のエンティティ型の名前。
注意
Principal 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、PublishedBy アソシエーションの定義の一部である ReferentialConstraint 要素を示します。 Publisher エンティティ型の Id プロパティは、参照制約のプリンシパル End を構成します。
<Association Name ="PublishedBy" >
<End Type ="BooksModel.Book" Role ="Book" Multiplicity ="*" >
</End >
<End Type ="BooksModel.Publisher" Role ="Publisher" Multiplicity ="1" />
<ReferentialConstraint >
<Principal Role ="Publisher" >
<PropertyRef Name ="Id" />
</Principal >
<Dependent Role ="Book" >
<PropertyRef Name ="PublisherId" />
</Dependent >
</ReferentialConstraint >
</Association >
概念スキーマ定義言語 (CSDL) の Property 要素は、EntityType 要素、ComplexType 要素、または RowType 要素の子にすることができます。
EntityType 要素と ComplexType 要素のアプリケーション
Property 要素が EntityType 要素または ComplexType 要素の子である場合、Property 要素はエンティティ型または複合型のインスタンスに含まれるデータの構造と特性を定義します。 概念モデルのプロパティは、クラスで定義されるプロパティに似ています。 クラスのプロパティがクラスの構造を定義し、オブジェクトに関する情報を伝達するのと同様に、概念モデルのプロパティはエンティティ型の構造を定義し、エンティティ型のインスタンスに関する情報を伝達します。
Property 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation 要素 (0 個または 1 個の要素を含めることができます)
Annotation 要素 (0 個以上の要素を含めることができます)
Nullable 、DefaultValue 、MaxLength 、FixedLength 、Precision 、Scale 、Unicode 、Collation 、ConcurrencyMode のファセットを Property 要素に適用できます。 ファセットは、プロパティ値をデータ ストアに格納する方法に関する情報を提供する XML 属性です。
注意
ファセットは、EDMSimpleType 型のプロパティにのみ適用できます。
次の表では、Property 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
プロパティの名前。
Type
はい
プロパティ値の型です。 プロパティ値の型は、 EDMSimpleType か、モデルのスコープ内にある (完全修飾名で表された) 複合型を指定する必要があります。
NULL 値の使用
いいえ
プロパティに null 値を指定できるかどうかに応じて、True (既定値) または False 。 [!注意]
> CSDL v1 では、複合型プロパティに Nullable="False"
が必要です。
DefaultValue
いいえ
プロパティの既定値です。
MaxLength
いいえ
プロパティ値の最大長。
FixedLength
いいえ
プロパティ値が固定長の文字列として格納されるかどうかにより、True または False 。
[精度]
いいえ
プロパティ値の有効桁数。
スケール
いいえ
プロパティ値の小数点以下桁数。
SRID
いいえ
空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
Unicode
いいえ
プロパティ値が Unicode 文字列として格納されるかどうかにより、True または False 。
Collation
いいえ
データ ソースで使用される照合順序を指定する文字列。
ConcurrencyMode
いいえ
None (既定値) または Fixed 。 値が Fixed に設定されている場合、プロパティ値はオプティミスティック コンカレンシーチェックで使用されます。
注意
Property 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、3 つの Property 要素がある EntityType 要素を示しています。
<EntityType Name ="Book" >
<Key >
<PropertyRef Name ="ISBN" />
</Key >
<Property Type ="String" Name ="ISBN" Nullable ="false" />
<Property Type ="String" Name ="Title" Nullable ="false" />
<Property Type ="Decimal" Name ="Revision" Nullable ="false" Precision ="29" Scale ="29" />
<NavigationProperty Name ="Publisher" Relationship ="BooksModel.PublishedBy"
FromRole ="Book" ToRole ="Publisher" />
<NavigationProperty Name ="Authors" Relationship ="BooksModel.WrittenBy"
FromRole ="Book" ToRole ="Author" />
</EntityType >
次の例は、5 つの Property 要素がある ComplexType 要素を示しています。
<ComplexType Name ="Address" >
<Property Type ="String" Name ="StreetAddress" Nullable ="false" />
<Property Type ="String" Name ="City" Nullable ="false" />
<Property Type ="String" Name ="StateOrProvince" Nullable ="false" />
<Property Type ="String" Name ="Country" Nullable ="false" />
<Property Type ="String" Name ="PostalCode" Nullable ="false" />
</ComplexType >
Property 要素が RowType 要素の子である場合、Property 要素はモデル定義関数との間で受け渡しできるデータの構造と特性を定義します。
Property 要素には、次の子要素のうち 1 つのみを含めることができます。
CollectionType
ReferenceType
RowType
Property 要素には、任意の数の子 annotation 要素を含めることができます。
注意
Annotation 要素は、CSDL v2 以降でのみ使用できます。
次の表では、Property 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
プロパティの名前。
Type
はい
プロパティ値の型です。
NULL 値の使用
いいえ
プロパティに null 値を指定できるかどうかに応じて、True (既定値) または False 。 [!注意]
> CSDL v1 では、複合型プロパティに Nullable="False"
が必要です。
DefaultValue
いいえ
プロパティの既定値です。
MaxLength
いいえ
プロパティ値の最大長。
FixedLength
いいえ
プロパティ値が固定長の文字列として格納されるかどうかにより、True または False 。
[精度]
いいえ
プロパティ値の有効桁数。
スケール
いいえ
プロパティ値の小数点以下桁数。
SRID
いいえ
空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
Unicode
いいえ
プロパティ値が Unicode 文字列として格納されるかどうかにより、True または False 。
Collation
いいえ
データ ソースで使用される照合順序を指定する文字列。
注意
Property 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
モデル定義関数の戻り値の型の構造を定義するために使用される Property 要素の例を次に示します。
<Function Name ="LastNamesAfter" >
<Parameter Name ="someString" Type ="Edm.String" />
<ReturnType >
<CollectionType >
<RowType >
<Property Name ="FirstName" Type ="Edm.String" Nullable ="false" />
<Property Name ="LastName" Type ="Edm.String" Nullable ="false" />
</RowType >
</CollectionType >
</ReturnType >
<DefiningExpression >
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression >
</Function >
概念スキーマ定義言語 (CSDL) の PropertyRef 要素は、エンティティ型のプロパティを参照して、そのプロパティが次の役割のいずれかを果たすことを示します。
エンティティのキー (ID を指定するエンティティ型のプロパティまたは一連のプロパティ) の一部。 1 つ以上の PropertyRef 要素を使用して、エンティティ キーを定義することができます。
参照制約の依存 End または プリンシパル End。
PropertyRef 要素に子要素として含めることができるのは、annotation 要素 (0 個以上) のみです。
注意
Annotation 要素は、CSDL v2 以降でのみ使用できます。
以下の表では、PropertyRef 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前
はい
参照されているプロパティの名前。
注意
PropertyRef 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
下の例は、エンティティ型 (Book ) を定義します。 エンティティ キーは、エンティティ型の ISBN プロパティを参照して定義されています。
<EntityType Name ="Book" >
<Key >
<PropertyRef Name ="ISBN" />
</Key >
<Property Type ="String" Name ="ISBN" Nullable ="false" />
<Property Type ="String" Name ="Title" Nullable ="false" />
<Property Type ="Decimal" Name ="Revision" Nullable ="false" Precision ="29" Scale ="29" />
<NavigationProperty Name ="Publisher" Relationship ="BooksModel.PublishedBy"
FromRole ="Book" ToRole ="Publisher" />
<NavigationProperty Name ="Authors" Relationship ="BooksModel.WrittenBy"
FromRole ="Book" ToRole ="Author" />
</EntityType >
次の例では、2 つの PropertyRef 要素が使用されており、2 つのプロパティ (Id と PublisherId ) が参照制約のプリンシパル End と依存 End であることが示されています。
<Association Name ="PublishedBy" >
<End Type ="BooksModel.Book" Role ="Book" Multiplicity ="*" >
</End >
<End Type ="BooksModel.Publisher" Role ="Publisher" Multiplicity ="1" />
<ReferentialConstraint >
<Principal Role ="Publisher" >
<PropertyRef Name ="Id" />
</Principal >
<Dependent Role ="Book" >
<PropertyRef Name ="PublisherId" />
</Dependent >
</ReferentialConstraint >
</Association >
概念スキーマ定義言語 (CSDL) の ReferenceType 要素は、エンティティ型への参照を指定します。 ReferenceType 要素は、次の要素の子にすることができます。
ReturnType (Function)
パラメーター
CollectionType
ReferenceType は、関数のパラメーターまたは戻り値の型を定義するときに使用されます。
ReferenceType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
以下の表では、ReferenceType 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
値
Type
はい
参照先エンティティ型の名前。
注意
ReferenceType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、Person エンティティ型への参照を受け取るモデル定義関数で、Parameter 要素の子として使用されている ReferenceType 要素を示します。
<Function Name ="GetYearsEmployed" ReturnType ="Edm.Int32" >
<Parameter Name ="instructor" >
<ReferenceType Type ="SchoolModel.Person" />
</Parameter >
<DefiningExpression >
Year(CurrentDateTime()) - Year(cast(instructor.HireDate as DateTime))
</DefiningExpression >
</Function >
次の例は、Person エンティティ型への参照を返すモデル定義関数で、ReturnType (Function) 要素の子として使用されている ReferenceType 要素を示します。
<Function Name ="GetPersonReference" >
<Parameter Name ="p" Type ="SchoolModel.Person" />
<ReturnType >
<ReferenceType Type ="SchoolModel.Person" />
</ReturnType >
<DefiningExpression >
REF(p)
</DefiningExpression >
</Function >
ReferentialConstraint 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の ReferentialConstraint 要素は、リレーショナル データベースの参照整合性制約と同様の機能を定義します。 データベース テーブルの列が別のテーブルの主キーを参照できるのと同じように、エンティティ型のプロパティが別のエンティティ型のエンティティ キーを参照できます。 参照されるエンティティ型は、制約の "プリンシパル End " と呼ばれます。 プリンシパル End を参照するエンティティ型は、制約の "依存 End " と呼ばれます。
1 つのエンティティ型で公開される外部キーが、別のエンティティ型のプロパティを参照する場合、ReferentialConstraint 要素は 2 つのエンティティ型の間の関連付けを定義します。 ReferentialConstraint 要素が、2 つのエンティティ型の関係についての情報を提供するので、マッピング仕様言語 (MSL) の対応する AssociationSetMapping 要素は不要です。 外部キーを公開しない 2 つのエンティティ型の間の関連付けには、対応する AssociationSetMapping 要素が存在する必要があります。これは、関連付け情報をデータ ソースにマップするためです。
ある 1 つのエンティティ型で外部キーが公開されない場合、ReferentialConstraint 要素が定義できるのは、そのエンティティ型と別のエンティティ型との間における主キーと主キーの制約だけです。
ReferentialConstraint 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Principal (1 個の要素のみ)
Dependent (1 個の要素のみ)
Annotation 要素 (0 個以上の要素)
ReferentialConstraint 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、ReferentialConstraint 要素を PublishedBy アソシエーションの定義の一部として使用する方法を示します。
<Association Name ="PublishedBy" >
<End Type ="BooksModel.Book" Role ="Book" Multiplicity ="*" >
</End >
<End Type ="BooksModel.Publisher" Role ="Publisher" Multiplicity ="1" />
<ReferentialConstraint >
<Principal Role ="Publisher" >
<PropertyRef Name ="Id" />
</Principal >
<Dependent Role ="Book" >
<PropertyRef Name ="PublisherId" />
</Dependent >
</ReferentialConstraint >
</Association >
ReturnType (Function) 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の ReturnType (Function) 要素は Function 要素で定義される関数の戻り値の型を指定します。 関数の戻り値の型は、ReturnType 属性で指定することもできます。
戻り値の型は、EdmSimpleType 、エンティティ型、複合型、行型、またはこれらの型のいずれかのコレクションである場合もあります。
関数の戻り値の型は、ReturnType 要素の Type 属性で指定することも、次のいずれかの子要素で指定することもできます。
CollectionType
ReferenceType
RowType
注意
ReturnType (Function) 要素の Type 属性と子要素の両方で関数の戻り値の型を指定すると、モデルの検証は行われません。
次の表では、ReturnType (Function) 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
ReturnType
いいえ
関数の戻り値の型。
注意
ReturnType (Function) 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、ある本が出版されてからの年数を返す関数の定義に Function 要素を使用しています。 戻り値の型が ReturnType (Function) 要素の Type 属性によって指定されていることに注意してください。
<Function Name ="GetYearsInPrint" >
<ReturnType Type =="Edm.Int32" >
<Parameter Name ="book" Type ="BooksModel.Book" />
<DefiningExpression >
Year(CurrentDateTime()) - Year(cast(book.PublishedDate as DateTime))
</DefiningExpression >
</Function >
ReturnType (FunctionImport) 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の ReturnType (FunctionImport) 要素は FunctionImport 要素で定義される関数の戻り値の型を指定します。 関数の戻り値の型は、ReturnType 属性で指定することもできます。
戻り値の型には、エンティティ型、複合型、または EdmSimpleType の任意のコレクションを指定できます。
関数の戻り値の型は、Type 属性または ReturnType (FunctionImport) 要素を使用して指定されます。
次の表では、ReturnType (FunctionImport) 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
値
Type
いいえ
関数が返す型。 ComplexType、EntityType、EDMSimpleType のコレクションである必要があります。
EntitySet
いいえ
関数がエンティティ型のコレクションを返す場合、EntitySet の値は、コレクションが所属するエンティティ セットである必要があります。 そうでない場合は、 EntitySet 属性を使用しないでください。
注意
ReturnType (FunctionImport) 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例では、書籍と発行元を返す FunctionImport を使用します。 この関数は 2 つの結果セットを返すので、2 つの ReturnType (FunctionImport) 要素が指定されていることに注意してください。
<FunctionImport Name ="GetBooksAndPublishers" >
<ReturnType Type =="Collection(BooksModel.Book )" EntitySet =”Books” >
<ReturnType Type =="Collection(BooksModel.Publisher)" EntitySet =”Publishers” >
</FunctionImport >
概念スキーマ定義言語 (CSDL) の RowType 要素は、概念モデルで定義された関数のパラメーターまたは戻り値の型として名前のない構造体を定義します。
RowType 要素は、次の要素の子にすることができます。
CollectionType
パラメーター
ReturnType (Function)
RowType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Property (1 個以上)
Annotation 要素 (0 個以上)
RowType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、CollectionType 要素を使用して、関数で行のコレクション (RowType 要素で指定) が返されることを指定するモデル定義関数を示しています。
<Function Name ="LastNamesAfter" >
<Parameter Name ="someString" Type ="Edm.String" />
<ReturnType >
<CollectionType >
<RowType >
<Property Name ="FirstName" Type ="Edm.String" Nullable ="false" />
<Property Name ="LastName" Type ="Edm.String" Nullable ="false" />
</RowType >
</CollectionType >
</ReturnType >
<DefiningExpression >
SELECT VALUE ROW(p.FirstName, p.LastName)
FROM SchoolEntities.People AS p
WHERE p.LastName >= somestring
</DefiningExpression >
</Function >
Schema 要素は、概念モデル定義のルート要素です。 概念モデルを構成するオブジェクト、関数、およびコンテナーの定義を格納します。
Schema 要素には、0 個以上の次の子要素を含めることができます。
Using
EntityContainer 要素
EntityType
EnumType
関連付け
ComplexType
機能
Schema 要素には、0 個または 1 個の Annotation 要素を含めることができます。
注意
Function 要素と Annotation 要素は、CSDL v2 以降でのみ使用できます。
Schema 要素は、Namespace 属性を使用して概念モデルのエンティティ型、複合型、およびアソシエーション オブジェクトの名前空間を定義します。 1 つの名前空間内で 2 つのオブジェクトが同じ名前を持つことはできません。 名前空間は、複数の Schema 要素と複数の .csdl ファイルにまたがることができます。
概念モデル名前空間は、Schema 要素の XML 名前空間とは異なります。 概念モデル名前空間 (Namespace 属性で定義) は、エンティティ型、複合型、およびアソシエーション型の論理コンテナーです。 Schema 要素の XML 名前空間 (xmlns 属性で示される) は、Schema 要素の子要素と属性の既定の名前空間です。 フォーム https://schemas.microsoft.com/ado/YYYY/MM/edm
(ここで、YYYY と MM はそれぞれ年と月を表します) の XML 名前空間 は CSDL 用に予約されています。 カスタム要素と属性は、このフォームがある名前空間に存在することはできません。
以下の表では、Schema 要素に適用できる属性について説明します。
テーブルを展開する
属性名
必要に応じて
Value
名前空間
はい
概念モデルの名前空間。 Namespace 属性の値は、型の完全修飾名を形成するために使用されます。 たとえば、Customer という名前の EntityType が Simple.Example.Model 名前空間にある場合、この EntityType の完全修飾名は SimpleExampleModel.Customer です。 Namespace 属性の値として、System 、Transient 、Edm という文字列を使用することはできません。 Namespace 属性の値を、SSDL Schema 要素の Namespace 属性の値と同じにすることはできません。
Alias
いいえ
名前空間の名前の代わりに使用される識別子。 たとえば、Customer という名前の EntityType が、Simple.Example.Model 名前空間にあり、Alias 属性の値が Model である場合、Model.Customer を EntityType の完全修飾名として使用することができます。
注意
Schema 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、1 つの EntityContainer 要素、2 つの EntityType 要素、および 1 つの Association 要素を含む Schema 要素を示しています。
<Schema xmlns ="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg ="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store ="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace ="ExampleModel" Alias ="Self" >
<EntityContainer Name ="ExampleModelContainer" >
<EntitySet Name ="Customers"
EntityType ="ExampleModel.Customer" />
<EntitySet Name ="Orders" EntityType ="ExampleModel.Order" />
<AssociationSet
Name ="CustomerOrder"
Association ="ExampleModel.CustomerOrders" >
<End Role ="Customer" EntitySet ="Customers" />
<End Role ="Order" EntitySet ="Orders" />
</AssociationSet >
</EntityContainer >
<EntityType Name ="Customer" >
<Key >
<PropertyRef Name ="CustomerId" />
</Key >
<Property Type ="Int32" Name ="CustomerId" Nullable ="false" />
<Property Type ="String" Name ="Name" Nullable ="false" />
<NavigationProperty
Name ="Orders"
Relationship ="ExampleModel.CustomerOrders"
FromRole ="Customer" ToRole ="Order" />
</EntityType >
<EntityType Name ="Order" >
<Key >
<PropertyRef Name ="OrderId" />
</Key >
<Property Type ="Int32" Name ="OrderId" Nullable ="false" />
<Property Type ="Int32" Name ="ProductId" Nullable ="false" />
<Property Type ="Int32" Name ="Quantity" Nullable ="false" />
<NavigationProperty
Name ="Customer"
Relationship ="ExampleModel.CustomerOrders"
FromRole ="Order" ToRole ="Customer" />
<Property Type ="Int32" Name ="CustomerId" Nullable ="false" />
</EntityType >
<Association Name ="CustomerOrders" >
<End Type ="ExampleModel.Customer"
Role ="Customer" Multiplicity ="1" />
<End Type ="ExampleModel.Order"
Role ="Order" Multiplicity ="*" />
<ReferentialConstraint >
<Principal Role ="Customer" >
<PropertyRef Name ="CustomerId" />
</Principal >
<Dependent Role ="Order" >
<PropertyRef Name ="CustomerId" />
</Dependent >
</ReferentialConstraint >
</Association >
</Schema >
概念スキーマ定義言語 (CSDL) の TypeRef 要素は、既存の名前付きの型への参照を提供します。 TypeRef 要素は、関数にパラメーターまたは戻り値の型としてのコレクションがあることを指定する CollectionType 要素の子である場合があります。
TypeRef 要素には、次の子要素を (ここで示す順序で) 含めることができます。
Documentation (0 個または 1 個の要素)
Annotation 要素 (0 個以上の要素)
TypeRef 要素に適用できる属性を次の表に示します。 CollectionType 属性、MaxLength 属性、FixedLength 属性、Precision 属性、Scale 属性、Unicode 属性、Collation 属性は、EDMSimpleTypes のみに適用されることに注意してください。
テーブルを展開する
属性名
必要に応じて
値
Type
いいえ
参照先の型の名前。
NULL 値の使用
いいえ
プロパティに null 値を指定できるかどうかに応じて、True (既定値) または False 。 [!注意]
> CSDL v1 では、複合型プロパティに Nullable="False"
が必要です。
DefaultValue
いいえ
プロパティの既定値です。
MaxLength
いいえ
プロパティ値の最大長。
FixedLength
いいえ
プロパティ値が固定長の文字列として格納されるかどうかにより、True または False 。
[精度]
いいえ
プロパティ値の有効桁数。
スケール
いいえ
プロパティ値の小数点以下桁数。
SRID
いいえ
空間システム参照識別子。 空間型のプロパティにのみ有効です。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
Unicode
いいえ
プロパティ値が Unicode 文字列として格納されるかどうかにより、True または False 。
Collation
いいえ
データ ソースで使用される照合順序を指定する文字列。
注意
CollectionType 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、TypeRef 要素を (CollectionType 要素の子として) 使用して、関数で Department エンティティ型のコレクションを受け入れることを指定するモデル定義関数を示しています。
<Function Name ="GetAvgBudget" >
<Parameter Name ="Departments" >
<CollectionType >
<TypeRef Type ="SchoolModel.Department" />
</CollectionType >
</Parameter >
<ReturnType Type ="Collection(Edm.Decimal)" />
<DefiningExpression >
SELECT VALUE AVG(d.Budget) FROM Departments AS d
</DefiningExpression >
</Function >
概念スキーマ定義言語 (CSDL) の Using 要素は、別の名前空間に存在する概念モデルのコンテンツをインポートします。 Namespace 属性の値を設定することにより、別の概念モデルで定義されているエンティティ型、複合型、およびアソシエーション型を参照することができます。 1 つの Schema 要素に対して複数の Using 要素を子にすることができます。
注意
CSDL の Using 要素の機能は、プログラミング言語における using ステートメントとは完全に同じではありません。 プログラミング言語での using ステートメントで名前空間をインポートしても、元の名前空間のオブジェクトが影響を受けることはありません。 CSDL では、インポートされた名前空間に、元の名前空間にあるエンティティ型から派生したエンティティ型が含まれている場合があります。 これは、元の名前空間で宣言されたエンティティ セットに影響を及ぼすことがあります。
Using 要素には、次の子要素を含めることができます。
Documentation (0 個または 1 個の要素を含めることができます)
Annotation 要素 (0 個以上の要素を含めることができます)
次の表は、Using 要素に適用できる属性を示しています。
テーブルを展開する
属性名
必要に応じて
Value
名前空間
はい
インポートされる名前空間の名前。
Alias
はい
名前空間の名前の代わりに使用される識別子。 この属性は必須ですが、オブジェクト名を修飾するために名前空間名の代わりに使用することは必須ではありません。
注意
Using 要素には、任意の数の annotation 属性 (カスタム XML 属性) を適用できます。 ただし、カスタム属性は CSDL 用に予約されたどの XML 名前空間にも属していない場合があります。 カスタム属性の完全修飾名は一意である必要があります。
次の例は、Using 要素を使用して、他の場所で定義された名前空間をインポートする方法を示すものです。 示されている Schema 要素の名前空間が BooksModel
であることに注目してください。 Publisher
EntityType 上の Address
プロパティは、複合型です。これは、ExtendedBooksModel
名前空間で定義されたものです (Using 要素でインポート)。
<Schema xmlns ="https://schemas.microsoft.com/ado/2009/11/edm"
xmlns:cg ="https://schemas.microsoft.com/ado/2009/11/codegeneration"
xmlns:store ="https://schemas.microsoft.com/ado/2009/11/edm/EntityStoreSchemaGenerator"
Namespace ="BooksModel" Alias ="Self" >
<Using Namespace ="BooksModel.Extended" Alias ="BMExt" />
<EntityContainer Name ="BooksContainer" >
<EntitySet Name ="Publishers" EntityType ="BooksModel.Publisher" />
</EntityContainer >
<EntityType Name ="Publisher" >
<Key >
<PropertyRef Name ="Id" />
</Key >
<Property Type ="Int32" Name ="Id" Nullable ="false" />
<Property Type ="String" Name ="Name" Nullable ="false" />
<Property Type ="BMExt.Address" Name ="Address" Nullable ="false" />
</EntityType >
</Schema >
概念スキーマ定義言語 (CSDL) の annotation 属性は、概念モデルのカスタム XML 属性です。 有効な XML 構造であることに加え、annotation 属性は次の条件を満たしている必要があります。
annotation 属性は、CSDL 用に予約された XML 名前空間に存在しない。
複数の annotation 属性を特定の 1 つの CSDL 要素に適用することができる。
2 つの任意の annotation 属性の完全修飾名が同じではない。
annotation 属性は、概念モデルの要素に関する追加のメタデータを提供するために使用できます。 annotation 要素に含まれるメタデータには、実行時に System.Data.Metadata.Edm 名前空間のクラスを使用してアクセスできます。
次の例は、annotation 属性 (CustomAttribute ) を持つ EntityType 要素を示しています。 また、エンティティ型の要素に適用される annotation 要素も示しています。
<Schema Namespace ="SchoolModel" Alias ="Self"
xmlns:annotation ="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns ="https://schemas.microsoft.com/ado/2009/11/edm" >
<EntityContainer Name ="SchoolEntities" annotation:LazyLoadingEnabled ="true" >
<EntitySet Name ="People" EntityType ="SchoolModel.Person" />
</EntityContainer >
<EntityType Name ="Person" xmlns:p ="http://CustomNamespace.com"
p:CustomAttribute ="Data here." >
<Key >
<PropertyRef Name ="PersonID" />
</Key >
<Property Name ="PersonID" Type ="Int32" Nullable ="false"
annotation:StoreGeneratedPattern ="Identity" />
<Property Name ="LastName" Type ="String" Nullable ="false"
MaxLength ="50" Unicode ="true" FixedLength ="false" />
<Property Name ="FirstName" Type ="String" Nullable ="false"
MaxLength ="50" Unicode ="true" FixedLength ="false" />
<Property Name ="HireDate" Type ="DateTime" />
<Property Name ="EnrollmentDate" Type ="DateTime" />
<p:CustomElement >
Custom metadata.
</p:CustomElement >
</EntityType >
</Schema >
次のコードは、annotation 属性でメタデータを取得し、コンソールに書き込みます。
EdmItemCollection collection = new EdmItemCollection("School.csdl");
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person", "SchoolModel", DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomAttribute"))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomAttribute"];
object annotationValue = annotationProperty.Value;
Console.WriteLine(annotationValue.ToString());
}
前のコードでは、School.csdl
ファイルがプロジェクトの出力ディレクトリにあり、プロジェクトに次の Imports
および Using
ステートメントが追加されていることを前提としています。
using System.Data.Metadata.Edm;
概念スキーマ定義言語 (CSDL) の annotation 要素は、概念モデルのカスタム XML 要素です。 有効な XML 構造が必要であることに加え、annotation 要素は次の条件も満たしている必要があります。
annotation 要素は、CSDL 用に予約された XML 名前空間内に存在できません。
複数の annotation 要素を特定の CSDL 要素の子にすることができます。
2 つの annotation 要素の完全修飾名を同じにすることはできません。
annotation 要素は、特定の CSDL 要素のその他すべての子要素より後に指定する必要があります。
annotation 要素は、概念モデルの要素に関する追加のメタデータを提供するために使用できます。 .NET Framework バージョン 4 以降では、annotation 要素に含まれるメタデータには、実行時に System.Data.Metadata.Edm 名前空間のクラスを使用してアクセスできます。
次の例は、annotation 要素 (CustomElement ) を含む EntityType 要素を示しています。 また、エンティティ型の要素に適用される annotation 属性も示しています。
<Schema Namespace ="SchoolModel" Alias ="Self"
xmlns:annotation ="https://schemas.microsoft.com/ado/2009/02/edm/annotation"
xmlns ="https://schemas.microsoft.com/ado/2009/11/edm" >
<EntityContainer Name ="SchoolEntities" annotation:LazyLoadingEnabled ="true" >
<EntitySet Name ="People" EntityType ="SchoolModel.Person" />
</EntityContainer >
<EntityType Name ="Person" xmlns:p ="http://CustomNamespace.com"
p:CustomAttribute ="Data here." >
<Key >
<PropertyRef Name ="PersonID" />
</Key >
<Property Name ="PersonID" Type ="Int32" Nullable ="false"
annotation:StoreGeneratedPattern ="Identity" />
<Property Name ="LastName" Type ="String" Nullable ="false"
MaxLength ="50" Unicode ="true" FixedLength ="false" />
<Property Name ="FirstName" Type ="String" Nullable ="false"
MaxLength ="50" Unicode ="true" FixedLength ="false" />
<Property Name ="HireDate" Type ="DateTime" />
<Property Name ="EnrollmentDate" Type ="DateTime" />
<p:CustomElement >
Custom metadata.
</p:CustomElement >
</EntityType >
</Schema >
次のコードは、annotation 要素内のメタデータを取得してコンソールに出力します。
EdmItemCollection collection = new EdmItemCollection("School.csdl" );
MetadataWorkspace workspace = new MetadataWorkspace();
workspace.RegisterItemCollection(collection);
EdmType contentType;
workspace.TryGetType("Person" , "SchoolModel" , DataSpace.CSpace, out contentType);
if (contentType.MetadataProperties.Contains("http://CustomNamespace.com:CustomElement" ))
{
MetadataProperty annotationProperty =
contentType.MetadataProperties["http://CustomNamespace.com:CustomElement" ];
object annotationValue = annotationProperty.Value;
Console.WriteLine(annotationValue.ToString());
}
前のコードでは、School.csdl ファイルがプロジェクトの出力ディレクトリにあり、プロジェクトに次の Imports
および Using
ステートメントが追加されていることを前提としています。
using System.Data.Metadata.Edm;
概念スキーマ定義言語 (CSDL) は EDMSimpleTypes という一連の抽象プリミティブ データ型をサポートします。このデータ型は、概念モデルのプロパティを定義します。 EDMSimpleTypes は、ストレージまたはホスト環境でサポートされているプリミティブ データ型のプロキシです。
下の表は、CSDL でサポートされるプリミティブ データ型の一覧を示します。 さらに、各 EDMSimpleType に使用できるファセットも示しています。
テーブルを展開する
EDMSimpleType
説明
使用できるファセット
Edm.Binary
バイナリ データを格納します。
MaxLength、FixedLength、Nullable、Default
Edm.Boolean
true または false の値を含みます。
Nullable、Default
Edm.Byte
符号なし 8 ビット整数値を格納します。
Precision、Nullable、Default
Edm.DateTime
日時を表します。
Precision、Nullable、Default
Edm.DateTimeOffset
GMT からのオフセット (分単位) としての日時を格納します。
Precision、Nullable、Default
Edm.Decimal
有効桁数と小数点以下桁数が固定長の数値を格納します。
Precision、Nullable、Default
Edm.Double
15 桁の有効桁数を持つ浮動小数点数を格納します
Precision、Nullable、Default
Edm.Float
7 桁の有効桁数を持つ浮動小数点数を格納します。
Precision、Nullable、Default
Edm.Guid
16 バイトの一意識別子を格納します。
Precision、Nullable、Default
Edm.Int16
符号付き 16 ビット整数値を格納します。
Precision、Nullable、Default
Edm.Int32
符号付き 32 ビット整数値を格納します。
Precision、Nullable、Default
Edm.Int64
符号付き 64 ビット整数値を格納します。
Precision、Nullable、Default
Edm.SByte
符号付き 8 ビット整数値を格納します。
Precision、Nullable、Default
Edm.String
文字データを格納します。
Unicode、FixedLength、MaxLength、Collation、Precision、Nullable、Default
Edm.Time
時刻を格納します。
Precision、Nullable、Default
Edm.Geography
Nullable、Default、SRID
Edm.GeographyPoint
Nullable、Default、SRID
Edm.GeographyLineString
Nullable、Default、SRID
Edm.GeographyPolygon
Nullable、Default、SRID
Edm.GeographyMultiPoint
Nullable、Default、SRID
Edm.GeographyMultiLineString
Nullable、Default、SRID
Edm.GeographyMultiPolygon
Nullable、Default、SRID
Edm.GeographyCollection
Nullable、Default、SRID
Edm.Geometry
Nullable、Default、SRID
Edm.GeometryPoint
Nullable、Default、SRID
Edm.GeometryLineString
Nullable、Default、SRID
Edm.GeometryPolygon
Nullable、Default、SRID
Edm.GeometryMultiPoint
Nullable、Default、SRID
Edm.GeometryMultiLineString
Nullable、Default、SRID
Edm.GeometryMultiPolygon
Nullable、Default、SRID
Edm.GeometryCollection
Nullable、Default、SRID
概念スキーマ定義言語 (CSDL) のファセットは、エンティティ型と複合型のプロパティに対する制約を表します。 ファセットは次の CSDL 要素で XML 属性として使用されます。
次の表は、CSDL でサポートされるファセットについて説明しています。 いずれのファセットもオプションです。 次に示す一部のファセットは、Entity Framework が概念モデルからデータベースを生成するときに使用されます。
注意
概念モデルのデータ型については、「概念モデルの型 (CSDL)」を参照してください。
テーブルを展開する
ファセット
説明
適用対象
データベースの生成に使用
ランタイムで使用
Collation
プロパティの値に対して比較と順序付け操作を行うときに使用する照合シーケンス (または並べ替え順序) を指定します。
Edm.String
はい
いいえ
ConcurrencyMode
プロパティの値をオプティミスティック コンカレンシー チェックに使用することを指定します。
すべての EDMSimpleType のプロパティ
いいえ
はい
既定値
インスタンス化で値が指定されない場合のプロパティの既定値を指定します。
すべての EDMSimpleType のプロパティ
はい
はい
FixedLength
プロパティ値の長さを可変とすることができるかどうかを指定します。
Edm.Binary 、Edm.String
はい
いいえ
MaxLength
プロパティ値の最大長を指定します。
Edm.Binary 、Edm.String
はい
いいえ
NULL 値の使用
プロパティに null 値を指定できるかどうかを指定します。
すべての EDMSimpleType のプロパティ
はい
はい
[精度]
Decimal 型のプロパティには、プロパティ値に含めることができる桁数を指定します。 Time 、DateTime 、DateTimeOffset 型のプロパティには、プロパティ値の秒の小数部の桁数を指定します。
Edm.DateTime 、Edm.DateTimeOffset 、Edm.Decimal 、Edm.Time
はい
いいえ
スケール
プロパティ値の小数点の右側の桁数を指定します。
Edm.Decimal
はい
いいえ
SRID
空間システム参照システム ID を指定します。 詳細については、SRID および SRID (SQL Server) に関するページを参照してください。
Edm.Geography、Edm.GeographyPoint、Edm.GeographyLineString、Edm.GeographyPolygon、Edm.GeographyMultiPoint、Edm.GeographyMultiLineString、Edm.GeographyMultiPolygon、Edm.GeographyCollection、Edm.Geometry、Edm.GeometryPoint、Edm.GeometryLineString、Edm.GeometryPolygon、Edm.GeometryMultiPoint、Edm.GeometryMultiLineString、Edm.GeometryMultiPolygon、Edm.GeometryCollection
いいえ
はい
Unicode
プロパティ値を Unicode として保存するかどうかを指定します。
Edm.String
はい
はい
注意
データベースを概念モデルから生成するときには、データベース生成ウィザードが Property 要素の StoreGeneratedPattern 属性の値を認識します。ただし、名前空間 https://schemas.microsoft.com/ado/2009/02/edm/annotation
にある場合に限ります。 属性でサポートされる値は、Identity と Computed です。 Identity の値は、データベースで生成される ID 値を持つデータベース列を生成します。 Computed の値は、データベースで計算される値を持つ列を生成します。
エンティティ型のプロパティに適用されるファセットの例を次に示します。
<EntityType Name ="Product" >
<Key >
<PropertyRef Name ="ProductId" />
</Key >
<Property Type ="Int32"
Name ="ProductId" Nullable ="false"
a:StoreGeneratedPattern ="Identity"
xmlns:a ="https://schemas.microsoft.com/ado/2009/02/edm/annotation" />
<Property Type ="String"
Name ="ProductName"
Nullable ="false"
MaxLength ="50" />
<Property Type ="String"
Name ="Location"
Nullable ="true"
MaxLength ="25" />
</EntityType >