引用完整性约束(实体数据模型)
实体数据模型 (EDM) 中的“引用完整性约束”与关系数据库中的引用完整性约束类似。 与数据库表中的一个(或多个)列可以引用另一个表的主键相同,实体类型的一个(或多个)属性可以引用另一个实体类型的实体键。 所引用的实体类型称为约束的“主体端”。 引用主体端的实体类型称为约束的“依赖端”**。
引用完整性约束定义为两个实体类型间的关联的一部分。 引用完整性约束的定义指定了以下信息:
约束的主体端。 (一个实体类型,其实体键由依赖端引用。)
主体端的实体键。
约束的依赖端。 (一个实体类型,它的一个或多个属性引用主体端的实体键。)
依赖端的一个或多个引用属性。
EDM 中的引用完整性约束的用途是确保始终存在有效关联。 有关更多信息,请参见外键属性(实体数据模型)。
示例
下图显示了一个具有两个关联的概念模型:WrittenBy 和 PublishedBy。 Book 实体类型有一个属性 PublisherId,当您为 PublishedBy 关联定义一个引用完整性约束时,它将引用 Publisher 实体类型的实体键。
ADO.NET Entity Framework使用一种称为概念架构定义语言 (CSDL) 的域特定语言 (DSL) 来定义概念模型。 下面的 CSDL 为上图所示的概念模型中的 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>