CSDL 仕様
Note
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 要素 (CSDL)
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 |
---|---|---|
名前 | はい | アソシエーションの名前。 |
Note
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>
AssociationSet 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の AssociationSet 要素は、同じ型のアソシエーション インスタンス用の論理コンテナーです。 アソシエーション セットは、複数のアソシエーション インスタンスを 1 つのデータ ソースにマップできるようグループ化する方法を指定します。
AssociationSet 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation (0 個または 1 個の要素を含めることができます)
- End (2 つの要素が必要とされます)
- Annotation 要素 (0 個以上の要素を含めることができます)
Association 属性は、アソシエーション セットが格納する関連付けの型を指定します。 アソシエーション セットの両端を構成するエンティティ セットは、正確に 2 個の子 End 要素で指定されます。
該当する属性
次の表は、AssociationSet 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
名前 | はい | エンティティ セットの名前。 Name 属性の値と Association 属性の値を同じにすることはできません。 |
関連付け | はい | 関連付けの完全修飾名。そのインスタンスは、アソシエーション セットに格納されます。 関連付けは、アソシエーション セットと同じ名前空間に存在する必要があります。 |
Note
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>
CollectionType 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の CollectionType 要素は、関数パラメーターまたは関数の戻り値の型がコレクションであることを指定します。 CollectionType 要素は、Parameter 要素または ReturnType (Function) 要素の子である場合があります。 コレクションの型は、Type 属性で指定することも、次のいずれかの子要素で指定することもできます。
- CollectionType
- ReferenceType
- RowType
- TypeRef
Note
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 | いいえ | データ ソースで使用される照合順序を指定する文字列。 |
Note
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 要素 (CSDL)
ComplexType 要素は、EdmSimpleType プロパティまたは他の複合型で構成されるデータ構造を定義します。 複合型は、エンティティ型または別の複合型のプロパティにすることができます。 複合型は、データを定義するという点でエンティティ型に似ています。 ただし、複合型とエンティティ型の間にはいくつかの重要な違いがあります。
- 複合型には ID (またはキー) がないため、独立して存在することができません。 複合型は、エンティティ型またはその他の複合型のプロパティとしてのみ存在できます。
- 複合型は、アソシエーションに参加できません。 アソシエーションのいずれの End にも複合型を指定できないため、複合型にはナビゲーション プロパティを定義できません。
- 複合型のスカラー プロパティはそれぞれ null に設定できますが、複合型のプロパティには null 値を指定できません。
ComplexType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation (0 個または 1 個の要素)
- Property (0 個以上の要素)
- Annotation 要素 (0 個以上の要素)
次の表は、ComplexType 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
名前 | はい | 複合型の名前。 複合型の名前は、モデルのスコープ内にある別の複合型、エンティティ型、またはアソシエーションの名前と同じにすることはできません。 |
BaseType | いいえ | 定義される複合型の基本データ型である、別の複合型の名前。 [!注意] |
> この属性は CSDL v1 では適用できません。 複合型の継承は、このバージョンではサポートされません。 | ||
要約 | いいえ | 複合型が抽象型かどうかにより、True または False (既定値)。 [!注意] |
> この属性は CSDL v1 では適用できません。 このバージョンの複合型を抽象型にすることはできません。 |
Note
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 式が含まれています。
Note
検証を行うため、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>
Dependent 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の Dependent 要素は、ReferentialConstraint 要素の子要素であり、参照制約の依存 End を定義します。 ReferentialConstraint 要素は、リレーショナル データベースの参照整合性制約と同様の機能を定義します。 データベース テーブルの列が別のテーブルの主キーを参照できるのと同じように、エンティティ型のプロパティが別のエンティティ型のエンティティ キーを参照できます。 参照されるエンティティ型は、制約の "プリンシパル End" と呼ばれます。 プリンシパル End を参照するエンティティ型は、制約の "依存 End" と呼ばれます。 PropertyRef 要素は、プリンシパル End を参照するキーを指定するために使用されます。
Dependent 要素には、次の子要素を (リストされている順序で) 含めることができます。
- PropertyRef (1 個以上の要素)
- Annotation 要素 (0 個以上の要素)
該当する属性
次の表は、Dependent 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
役割 | はい | アソシエーションの依存 End 上のエンティティ型の名前。 |
Note
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>
Documentation 要素 (CSDL)
概念スキーマ定義言語 (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>
End 要素 (CSDL)
概念スキーマ定義言語 (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 個、または複数個のエンティティ型インスタンスが存在することを示します。 |
Note
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 個以上の要素)
Note
Annotation 要素は、それ以外のすべての子要素より後に指定する必要があります。 Annotation 要素は、CSDL v2 以降でのみ使用できます。
該当する属性
次の表では、End 要素が AssociationSet 要素の子である場合に適用できる属性について説明します。
属性名 | 必要に応じて | Value |
---|---|---|
EntitySet | はい | 親 AssociationSet 要素の 1 つの End を定義する EntitySet 要素の名前。 EntitySet 要素は、親 AssociationSet 要素と同じエンティティ コンテナー内で定義されている必要があります。 |
役割 | いいえ | アソシエーション セット End の名前。 Role 属性が使用されない場合、アソシエーション セット End の名前がエンティティ セット名になります。 |
Note
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 | いいえ | 同じ名前空間内にある別のエンティティ コンテナーの名前 |
Note
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 要素 (CSDL)
概念スキーマ定義言語の EntitySet 要素は、エンティティ型のインスタンス、およびそのエンティティ型から派生した任意の型のインスタンスの論理コンテナーです。 エンティティ型とエンティティ セットの間のリレーションシップは、リレーショナル データベースの行とテーブルの間のリレーションシップと似ています。 エンティティ型は、行と同様に関連データのセットを定義し、エンティティ セットには、テーブルと同様に、その定義のインスタンスが含まれます。 エンティティ セットは、エンティティ型のインスタンスをグループ化するための構造を提供します。これにより、データ ソース内の関連するデータ構造に、エンティティ型のインスタンスをマッピングできるようになります。
特定のエンティティ型に対して複数のエンティティ セットを定義できます。
Note
EF デザイナーでは、型ごとに複数のエンティティ セットを含んでいる概念モデルはサポートされません。
EntitySet 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation 要素 (0 個または 1 個の要素を含めることができます)
- Annotation 要素 (0 個以上の要素を含めることができます)
該当する属性
次の表は、EntitySet 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
名前 | はい | エンティティ セットの名前。 |
EntityType | はい | エンティティ型の完全修飾名。そのインスタンスは、エンティティ セットに格納されます。 |
Note
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 要素 (CSDL)
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 で使用される概念モデルで定義されるエンティティ型だけです。 |
Note
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 要素 (CSDL)
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 です。 |
Note
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>
Function 要素 (CSDL)
概念スキーマ定義言語 (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 | いいえ | 関数の戻り値の型。 |
Note
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>
FunctionImport 要素 (CSDL)
概念スキーマ定義言語 (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 です。 |
Note
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 要素 (CSDL)
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 要素 (CSDL)
Member 要素は EnumType 要素の子要素であり、列挙型のメンバーを定義します。
該当する属性
次の表は、FunctionImport 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
名前 | はい | メンバーの名前。 |
Value | いいえ | メンバーの値。 既定では、最初のメンバーの値は 0 で、後続の列挙子の値は 1 ずつ増加していきます。 同じ値を持つ複数のメンバーが存在する可能性があります。 |
Note
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 要素で定義) と同じである必要があります。 |
Note
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>
OnDelete 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の OnDelete 要素は、アソシエーションと関係のある動作を定義します。 Action 属性が、アソシエーションの一方の End で Cascade に設定されている場合、その End にあるエンティティ型が削除されると、アソシエーションの他方の End で関連付けられているエンティティ型も削除されます。 2 つのエンティティ型間のアソシエーションが主キーと主キーのリレーションシップである場合、アソシエーションの他方の End にあるプリンシパル オブジェクトが削除されると、OnDelete の指定にかかわらず、読み込まれた依存オブジェクトも削除されます。
Note
OnDelete 要素が影響を及ぼすのは、アプリケーションの実行時の動作だけです。データ ソースでの動作には影響を及ぼしません。 データ ソースで定義された動作は、アプリケーションで定義された動作と同じである必要があります。
OnDelete 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation (0 個または 1 個の要素)
- Annotation 要素 (0 個以上の要素)
該当する属性
次の表は、OnDelete 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
操作 | はい | Cascade または None。 Cascade の場合、プリンシパル エンティティ型が削除されると、依存エンティティ型も削除されます。 None の場合、プリンシパル エンティティ型が削除されても、依存エンティティ型は削除されません。 |
Note
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>
Parameter 要素 (CSDL)
概念スキーマ定義言語 (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) に関するページを参照してください。 |
Note
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>
Function 要素のアプリケーション
Parameter 要素 (Function 要素の子要素として) は、概念モデルで定義または宣言される関数のパラメーターを定義します。
Parameter 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation (0 個または 1 個の要素)
- CollectionType (0 個または 1 個の要素)
- ReferenceType (0 個または 1 個の要素)
- RowType (0 個または 1 個の要素)
Note
Property 要素の子要素にできるのは、CollectionType、ReferenceType、または RowType のうち 1 つだけです。
- Annotation 要素 (0 個以上の要素を含めることができます)
Note
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 | いいえ | データ ソースで使用される照合順序を指定する文字列。 |
Note
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>
Principal 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の Principal 要素は、ReferentialConstraint 要素の子要素であり、参照制約のプリンシパル End を定義します。 ReferentialConstraint 要素は、リレーショナル データベースの参照整合性制約と同様の機能を定義します。 データベース テーブルの列が別のテーブルの主キーを参照できるのと同じように、エンティティ型のプロパティが別のエンティティ型のエンティティ キーを参照できます。 参照されるエンティティ型は、制約の "プリンシパル End" と呼ばれます。 プリンシパル End を参照するエンティティ型は、制約の "依存 End" と呼ばれます。 PropertyRef 要素は、依存 End によって参照されるキーを指定するために使用されます。
Principal 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- PropertyRef (1 個以上の要素)
- Annotation 要素 (0 個以上の要素)
該当する属性
次の表では、Principal 要素に適用できる属性について説明します。
属性名 | 必要に応じて | Value |
---|---|---|
役割 | はい | アソシエーションのプリンシパル End 上のエンティティ型の名前。 |
Note
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>
Property 要素 (CSDL)
概念スキーマ定義言語 (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 属性です。
Note
ファセットは、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に設定されている場合、プロパティ値はオプティミスティック コンカレンシーチェックで使用されます。 |
Note
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>
RowType 要素のアプリケーション
Property 要素が RowType 要素の子である場合、Property 要素はモデル定義関数との間で受け渡しできるデータの構造と特性を定義します。
Property 要素には、次の子要素のうち 1 つのみを含めることができます。
- CollectionType
- ReferenceType
- RowType
Property 要素には、任意の数の子 annotation 要素を含めることができます。
Note
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 | いいえ | データ ソースで使用される照合順序を指定する文字列。 |
Note
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>
PropertyRef 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の PropertyRef 要素は、エンティティ型のプロパティを参照して、そのプロパティが次の役割のいずれかを果たすことを示します。
- エンティティのキー (ID を指定するエンティティ型のプロパティまたは一連のプロパティ) の一部。 1 つ以上の PropertyRef 要素を使用して、エンティティ キーを定義することができます。
- 参照制約の依存 End または プリンシパル End。
PropertyRef 要素に子要素として含めることができるのは、annotation 要素 (0 個以上) のみです。
Note
Annotation 要素は、CSDL v2 以降でのみ使用できます。
該当する属性
以下の表では、PropertyRef 要素に適用できる属性について説明します。
属性名 | 必要に応じて | Value |
---|---|---|
名前 | はい | 参照されているプロパティの名前。 |
Note
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>
ReferenceType 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の ReferenceType 要素は、エンティティ型への参照を指定します。 ReferenceType 要素は、次の要素の子にすることができます。
- ReturnType (Function)
- パラメーター
- CollectionType
ReferenceType は、関数のパラメーターまたは戻り値の型を定義するときに使用されます。
ReferenceType 要素には、次の子要素を (ここで示す順序で) 含めることができます。
- Documentation (0 個または 1 個の要素)
- Annotation 要素 (0 個以上の要素)
該当する属性
以下の表では、ReferenceType 要素に適用できる属性について説明します。
属性名 | 必要に応じて | 値 |
---|---|---|
Type | はい | 参照先エンティティ型の名前。 |
Note
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
Note
ReturnType (Function) 要素の Type 属性と子要素の両方で関数の戻り値の型を指定すると、モデルの検証は行われません。
該当する属性
次の表では、ReturnType (Function) 要素に適用できる属性について説明します。
属性名 | 必要に応じて | Value |
---|---|---|
ReturnType | いいえ | 関数の戻り値の型。 |
Note
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 属性を使用しないでください。 |
Note
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>
RowType 要素 (CSDL)
概念スキーマ定義言語 (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 要素 (CSDL)
Schema 要素は、概念モデル定義のルート要素です。 概念モデルを構成するオブジェクト、関数、およびコンテナーの定義を格納します。
Schema 要素には、0 個以上の次の子要素を含めることができます。
- Using
- EntityContainer 要素
- EntityType
- EnumType
- 関連付け
- ComplexType
- 機能
Schema 要素には、0 個または 1 個の Annotation 要素を含めることができます。
Note
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 の完全修飾名として使用することができます。 |
Note
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>
TypeRef 要素 (CSDL)
概念スキーマ定義言語 (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 | いいえ | データ ソースで使用される照合順序を指定する文字列。 |
Note
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>
Using 要素 (CSDL)
概念スキーマ定義言語 (CSDL) の Using 要素は、別の名前空間に存在する概念モデルのコンテンツをインポートします。 Namespace 属性の値を設定することにより、別の概念モデルで定義されているエンティティ型、複合型、およびアソシエーション型を参照することができます。 1 つの Schema 要素に対して複数の Using 要素を子にすることができます。
Note
CSDL の Using 要素の機能は、プログラミング言語における using ステートメントとは完全に同じではありません。 プログラミング言語での using ステートメントで名前空間をインポートしても、元の名前空間のオブジェクトが影響を受けることはありません。 CSDL では、インポートされた名前空間に、元の名前空間にあるエンティティ型から派生したエンティティ型が含まれている場合があります。 これは、元の名前空間で宣言されたエンティティ セットに影響を及ぼすことがあります。
Using 要素には、次の子要素を含めることができます。
- Documentation (0 個または 1 個の要素を含めることができます)
- Annotation 要素 (0 個以上の要素を含めることができます)
該当する属性
次の表は、Using 要素に適用できる属性を示しています。
属性名 | 必要に応じて | Value |
---|---|---|
名前空間 | はい | インポートされる名前空間の名前。 |
Alias | はい | 名前空間の名前の代わりに使用される識別子。 この属性は必須ですが、オブジェクト名を修飾するために名前空間名の代わりに使用することは必須ではありません。 |
Note
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>
annotation 属性 (CSDL)
概念スキーマ定義言語 (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;
Annotation 要素 (CSDL)
概念スキーマ定義言語 (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)
概念スキーマ定義言語 (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) のファセットは、エンティティ型と複合型のプロパティに対する制約を表します。 ファセットは次の CSDL 要素で XML 属性として使用されます。
- プロパティ
- TypeRef
- パラメーター
次の表は、CSDL でサポートされるファセットについて説明しています。 いずれのファセットもオプションです。 次に示す一部のファセットは、Entity Framework が概念モデルからデータベースを生成するときに使用されます。
Note
概念モデルのデータ型については、「概念モデルの型 (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 | はい | はい |
Note
データベースを概念モデルから生成するときには、データベース生成ウィザードが 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>
.NET