模型更新向导对 .edmx 文件所做的更改
使用模型更新向导可以在对基础数据库进行更改后更新 edmx 文件。 以下是使用模型更新向导更新 .edmx 文件时需要注意的非常重要的方面:
模型更新向导在基于数据库的更改更新 .edmx 文件时将覆盖现有的存储模型。 这意味着将删除对存储模型所做的任何自定义更改。
模型更新向导对概念模型和映射只做累加性更改。 这意味着如果向数据库中添加新的对象,模型更新向导将向概念模型中添加相应的实体和关联,并将其映射到存储模型。 但是,如果从数据库中移除对象,模型更新向导并不会从概念模型中移除相应的实体或关联(但移除相应的映射)。 有关从存储模型中移除对象而不运行模型更新向导的更多信息,请参见如何:从存储模型中删除对象(实体数据模型工具)。
如果启用**“确定所生成对象名称的单复数形式”复选框(在向导的“添加”**选项卡上),向导将尝试执行以下操作:
所有实体类型名称采用单数形式。
所有实体集名称采用复数形式。
对于最多返回一个实体的每个导航属性,名称采用单数形式。
对于返回多个实体的每个导航属性,名称采用复数形式。
实体数据模型向导通过创建 PluralizationService 并将其传递到 EntityModelSchemaGenerator 对单复数形式应用英语语言规则。
如果启用**“在模型中加入外键列”复选框(在向导的“添加”**选项卡上),向导将在数据库中与外键列相对应的新生成的实体类型上加入属性。 有关更多信息,请参见Defining and Managing Relationships。
从数据库更新时对概念模型的更改
下表提供了模型更新向导在数据库对象发生更改时如何修改概念模型的详细信息。
数据库对象 | 数据库中对象的更改 | 从数据库更新时对概念模型的所做更改 |
---|---|---|
表/视图 |
添加 |
将向概念模型添加新的实体类型及其相应的关联和映射。 |
删除 |
从存储模型移除表或视图。 删除对该表的所有映射。 如果表或视图拥有存储某外键关系的键的一个或多个列,则删除相应关联的映射。 |
|
重命名 |
重命名一个表或视图对概念模型和映射产生的影响等同于删除具有旧名称的表/视图并添加具有新名称的表/视图。 |
|
更改主键 |
如果将列添加到表或视图的主键,则为所有引用该新主键的外键向概念模型添加关联。 相应的新关联将被添加到概念模型中。 基于旧主键的之前存在的关联(或这些之前存在的关联的两端或其中一端)将不再映射。
注意:
未映射的关联仍将显示设计器图面上,并将导致验证错误。若要更正验证错误,请删除未映射的关联或重新映射。
如果从主键移除某列,则必须移除相应实体属性的键指定。 如果将作为实体属性的列添加到主键,则必须将该实体属性设置为实体键。 有关如何修改属性的信息,请参见如何:创建和修改标量属性(实体数据模型工具)。 如果将现有列添加到主键,并且之前曾映射到某个关联(而不是实体属性),则将新建一个相应的实体属性。 |
|
列 |
添加 |
将用匹配的属性和映射更新相应的实体。 如果相应的类型是继承层次结构的一部分,则只通过匹配的属性更新距层次结构的根最近的和映射到受影响的表的实体类型。 这将避免为层次结构中的子实体定义与其上级实体相同的属性。 |
删除 |
删除对该列的映射。 |
|
重命名 |
重命名一列对概念模型产生的影响等同于删除具有旧名称的列并添加具有新名称的列。 如果重命名属于外键约束的列,则在存在所有必需实体类型时,将新关联和所需的映射添加到概念模型。 |
|
更改定义 |
不会更改概念模型或映射。 如果列类型的更改导致相应的实体属性类型不兼容,则可能需要手动更新该模型。 有关如何修改属性的信息,请参见如何:创建和修改标量属性(实体数据模型工具)。 |
|
外键 |
添加 |
如果存在所有必要的实体类型,则向概念模型添加一个新关联及所需的映射。 |
删除 |
不会更改概念模型或映射。 |
|
重命名 |
不会更改概念模型或映射。 |
|
存储过程 |
添加 |
不会更改概念模型或映射。 可将存储过程作为“函数导入”手动添加到概念模型。 有关更多信息,请参见如何:导入存储过程(实体数据模型工具)。 |
删除 |
将删除到该存储过程的映射。 如果有“函数导入”映射到该存储过程,则必须删除“函数导入”或将其映射到其他存储过程。 如果某实体类型的插入、更新或删除行为映射到该存储过程,则删除这些映射。 |
|
重命名 |
将删除对实体类型的任何“函数导入”或插入、更新或删除行为的存储过程映射。 这对概念模型产生的影响等同于删除具有旧名称的存储过程并添加具有新名称的存储过程。 必须为重命名的存储过程创建新的“函数导入”,或将原有“函数导入”重新映射到重命名的存储过程。 |
|
更改定义 |
如果向存储过程添加参数或从存储过程移除参数,则对该存储过程的所有映射都将变为无效。 如果有“函数导入”映射到该存储过程,则必须删除并重新创建“函数导入”。 如果某实体类型的插入、更新或删除行为映射到该存储过程,则必须重新映射该行为。 |
另请参见
任务
如何:在数据库发生更改时更新 .edmx 文件(实体数据模型工具)