关系 - EF Designer
注意
本页介绍有关使用 EF Designer 设置模型中的关系的信息。 有关 EF 中的关系以及如何使用关系访问和操作数据的一般信息,请参阅“关系和导航属性”。
关联定义模型中实体类型之间的关系。 本主题演示如何使用 Entity Framework Designer (EF Designer) 映射关联。 下图显示了使用 EF Designer 时使用的主窗口。
注意
在构建概念模型时,有关未映射的实体和关联的警告可能会显示在“错误列表”中。 可以忽略这些警告,因为选择从模型生成数据库后,错误就会消失。
关联概述
使用 EF Designer 设计模型时,.edmx 文件表示模型。 在 .edmx 文件中,Association 元素定义两个实体类型之间的关系。 关联必须指定关系中涉及的实体类型和关系的每一端可能的实体类型数量(也称为重数)。 关联端的重数的值可以为一 (1)、零或一 (0..1) 或多 (*)。 此信息在两个子 End 元素中指定。
在运行时,可通过导航属性或外键(如果选择在实体中公开外键)访问关联一端的实体类型实例。 公开外键后,实体之间的关系由 ReferentialConstraint 元素(Association 元素的子元素)管理。 建议始终公开实体中关系的外键。
注意
在多对多 (*:*) 中,无法向实体添加外键。 在 *:* 关系中,使用独立的对象管理关联信息。
有关 CSDL 元素(ReferentialConstraint、Association 等)的信息,请参阅 CSDL 规范。
创建和删除关联
使用 EF Designer 创建关联会更新 .edmx 文件的模型内容。 创建关联后,必须创建该关联的映射(本主题的后面部分将进行讨论)。
注意
本部分假定已添加要在模型之间创建关联的实体。
创建关联
右键单击设计图面的空白区域,指向“添加新项”,然后选择“关联…”。
在“添加关联”对话框中填写关联设置。
注意
通过清除“导航属性”和“将外键属性添加到 <实体类型名称> 实体”复选框,可以选择不向位于关联各端的实体中添加导航属性或外键属性。 如果只添加一个导航属性,则将只能在一个方向遍历关联。 如果不添加导航属性,则必须选择添加外键属性才能访问位于关联各端的实体。
单击“确定”。
删除关联
若要删除关联,请执行以下操作之一:
在 EEF Designer 图面上右键单击关联并选择“删除”。
或 -
选择一个或多个关联并按 Delete 键。
将外键属性包含在实体中(引用约束)
建议始终公开实体中关系的外键。 Entity Framework 使用引用约束来标识属性充当关系的外键。
如果在创建关系时选中了“将外键属性添加到 <实体类型名称> 实体”复选框,则会为你添加此引用约束。
使用 EF Designer 添加或编辑引用约束时,EF Designer 会在 .edmx 文件的 CSDL 内容中添加或修改 ReferentialConstraint 元素。
双击要编辑的关联。 此时将显示“引用约束”对话框。
从“主体”下拉列表中选择引用约束中的主体实体。 该实体的键属性将添加到对话框中的“主体键”列表中。
从“依赖项”下拉列表中选择引用约束中的依赖实体。
对于具有依赖键的每个主体键,请从“依赖键”列中的下拉列表中选择对应的依赖键。
单击“确定”。
创建和编辑关联映射
可在 EF Designer 的“映射详细信息”窗口中指定关联映射到数据库的方式。
注意
只能映射未指定引用约束的关联的详细信息。 如果指定了引用约束,则会在实体中包含外键属性,可使用该实体的“映射详细信息”来控制外键映射到的列。
创建关联映射
右键单击设计图面中的关联,然后选择“表映射”。 这会在“映射详细信息”窗口中显示关联映射。
单击“添加表或视图”。 此时将显示一个下拉列表,其中包含存储模型中的所有表。
选择关联要映射到的表。 “映射详细信息”窗口会显示关联的两端以及位于各端的实体类型的键属性。
对于每个键属性,单击“列”字段,然后选择该属性要映射到的列。
编辑关联映射
- 右键单击设计图面中的关联,然后选择“表映射”。 这会在“映射详细信息”窗口中显示关联映射。
- 单击“映射到 <表名>”。 此时将显示一个下拉列表,其中包含存储模型中的所有表。
- 选择关联要映射到的表。 “映射详细信息”窗口会显示关联的两端以及位于各端的实体类型的键属性。
- 对于每个键属性,单击“列”字段,然后选择该属性要映射到的列。
编辑和删除导航属性
导航属性是快捷方式属性,用于定位模型中位于关联各端的实体。 在创建两个实体类型之间的关联时可以创建导航属性。
编辑导航属性
- 在 EF Designer 图面上选择一个导航属性。 有关导航属性的信息显示在 Visual Studio 的“属性”窗口中。
- 在“属性”窗口中更改该属性的设置。
删除导航属性
- 如果概念模型中的实体类型上没有公开外键,则删除导航属性可能导致仅在一个方向遍历相应的关联,或者根本不遍历关联。
- 在 EF Designer 图面上右键单击导航属性,并选择“删除”。