Entity Framework – Update Model From Database, Part 1
2008-10-19 10:01
351 查看
[align=center]Entity Framework – Update Model From Database, Part 1[/align]
Update Model from Database 是EDM 设计器的一个重要改进功能,支持增加新的数据库表和列,Model能够正确处理类型(Type)和属性(Property)的改名,能够检测继承和映射的改变。这里,我们简要介绍这一功能的使用及其限制。
首先,我们使用Northwind 数据库,并添加Products 数据表。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/2db4fc8b578b72b1a28931c9e994ee1a.jpg)
接着,将Products 更名为 Product,并运行Update Model from Database – 该菜单项在Model 设计器的右键菜单中,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/92b5dda48d0806010dde194312a67c63.jpg)
Update Model from Database 的界面如下,可以方便增加数据表、视图、存储过程的映射。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/c24aa6513424942c487f98d41c1e1110.jpg)
注意上图也提供了Refresh / Delete 页面,其功能分别如下:
Add – 显示数据库中的对象,如表、视图、存储过程,但没有在Model的对象。
Refresh – 显示同时在数据库和Model 中的对象。
Delete – 显示在Model 中的对象,但不存在于数据库。
因为向导总是重新生成SSDL – 任何对SSDL 的更改在Refresh的时候将丢失。下面,我们增加Orders, Order_Details, Suppliers 数据表到Model 中:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/a2bf38d74beffb9de679fae150fc2ef1.jpg)
但是,现在我们校验(Valid)Model时,有可能出现如下的验证错误:
"Problem in Mapping Fragment(s) starting at line(s) (110, 176): Non-primary-key column(s) [SupplierID] being mapped in both fragments to different conceptual side properties - data inconsistency is possible because the corresponding conceptual side properties can be independently modified.”
Entity Framework 提示Products表中SupplierID列映射了2次。原因是在第一次导入时,仅仅增加了一个表products,因此没有创建关联(association),SupplierID字段表现为一个属性。现在,我们查看Products表和Suppliers表的关联映射,发现关联映射到SupplierID列:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/78beca10b11e71aff90b8c2ba86772ad.jpg)
在这种情况,Update Model Wizard 向导也无能为力,因为Update Model的策略是避免删除model的任何部分。因此,我们删除Product 类型的SupplierID属性,这样Model验证通过。
接下来,我们修改数据库对象:
1. 在Suppliers 数据表增加IsCurrent 列。
2. 从Suppliers 数据表中删除 ContactTitle列。
一旦完成上述更新后,我们再次更新Model,如下是Suppliers 类型的属性列表:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/579befcb6f89ac32776d6b8026f3b85f.jpg)
我们也将看到如下的验证错误:
[align=left]“Property ContactTitle is not mapped or used in a condition.”[/align]
向导增加了新的属性IsCurrent到Suppliers类型中,但是没有删除ContactTitle属性,这是“不删除model元素”的策略。因此,我们需要手动删除ContactTitle属性。
下一步数据库更新是演示向导中新的映射分析特性(Mapping Analysis Feature):
1. 增加一个新的Supplier类型的表,命名为PremiumSuppliers,增加2列,如下图所示。
2. 增加SupplierContract 表到数据库中,包含大量的合同文档和额外的元数据。增加3列,如下图所示。
3. 增加上述2个表和Suppliers表之间的PK to PK的约束,主键表为Suppliers表。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/b2c39e038febcb8d2367f9555b1b4087.jpg)
欢迎继续访问 - Entity Framework – Update Model From Database, Part 2。
原文链接:
1. Entity Framework – Update Model From Database, Part 1
Update Model from Database 是EDM 设计器的一个重要改进功能,支持增加新的数据库表和列,Model能够正确处理类型(Type)和属性(Property)的改名,能够检测继承和映射的改变。这里,我们简要介绍这一功能的使用及其限制。
首先,我们使用Northwind 数据库,并添加Products 数据表。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/2db4fc8b578b72b1a28931c9e994ee1a.jpg)
接着,将Products 更名为 Product,并运行Update Model from Database – 该菜单项在Model 设计器的右键菜单中,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/92b5dda48d0806010dde194312a67c63.jpg)
Update Model from Database 的界面如下,可以方便增加数据表、视图、存储过程的映射。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/c24aa6513424942c487f98d41c1e1110.jpg)
注意上图也提供了Refresh / Delete 页面,其功能分别如下:
Add – 显示数据库中的对象,如表、视图、存储过程,但没有在Model的对象。
Refresh – 显示同时在数据库和Model 中的对象。
Delete – 显示在Model 中的对象,但不存在于数据库。
因为向导总是重新生成SSDL – 任何对SSDL 的更改在Refresh的时候将丢失。下面,我们增加Orders, Order_Details, Suppliers 数据表到Model 中:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/a2bf38d74beffb9de679fae150fc2ef1.jpg)
但是,现在我们校验(Valid)Model时,有可能出现如下的验证错误:
"Problem in Mapping Fragment(s) starting at line(s) (110, 176): Non-primary-key column(s) [SupplierID] being mapped in both fragments to different conceptual side properties - data inconsistency is possible because the corresponding conceptual side properties can be independently modified.”
Entity Framework 提示Products表中SupplierID列映射了2次。原因是在第一次导入时,仅仅增加了一个表products,因此没有创建关联(association),SupplierID字段表现为一个属性。现在,我们查看Products表和Suppliers表的关联映射,发现关联映射到SupplierID列:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/78beca10b11e71aff90b8c2ba86772ad.jpg)
在这种情况,Update Model Wizard 向导也无能为力,因为Update Model的策略是避免删除model的任何部分。因此,我们删除Product 类型的SupplierID属性,这样Model验证通过。
接下来,我们修改数据库对象:
1. 在Suppliers 数据表增加IsCurrent 列。
2. 从Suppliers 数据表中删除 ContactTitle列。
一旦完成上述更新后,我们再次更新Model,如下是Suppliers 类型的属性列表:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/579befcb6f89ac32776d6b8026f3b85f.jpg)
我们也将看到如下的验证错误:
[align=left]“Property ContactTitle is not mapped or used in a condition.”[/align]
向导增加了新的属性IsCurrent到Suppliers类型中,但是没有删除ContactTitle属性,这是“不删除model元素”的策略。因此,我们需要手动删除ContactTitle属性。
下一步数据库更新是演示向导中新的映射分析特性(Mapping Analysis Feature):
1. 增加一个新的Supplier类型的表,命名为PremiumSuppliers,增加2列,如下图所示。
2. 增加SupplierContract 表到数据库中,包含大量的合同文档和额外的元数据。增加3列,如下图所示。
3. 增加上述2个表和Suppliers表之间的PK to PK的约束,主键表为Suppliers表。
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/b2c39e038febcb8d2367f9555b1b4087.jpg)
欢迎继续访问 - Entity Framework – Update Model From Database, Part 2。
原文链接:
1. Entity Framework – Update Model From Database, Part 1
![]() |
相关文章推荐
- Entity Framework – Update Model From Database, Part 2
- Entity Framework – Update Model From Database, Part 2
- Entity Framework – Update Model From Database, Part 1
- Entity Framework – Update Model From Database, Part 1
- Entity Framework – Update Model From Database, Part 2
- EntiyFramework :Update model from database引起的两个问题
- PD Update Model from database, Unable to list the users.
- LINK - EF6 Update/Insert/Delete model object from outside of DbContext
- Qt15 Update a data from Sqlite database with pushbutton
- Could not update Activiti database schema: unknown version from database: '5.20.0.1'
- From-Linear-Model-to-Generalized-Linear-Model-Part 1
- entityframework core database first update model
- BDNtv: Deriving a model from an existing database with ECO II in Delphi 2005
- Could not update Activiti database schema: unknown version from database: ‘5.x.x.x‘
- Model View Presenter Part I – Building it from Scratch
- DbEntry.Net3.6 Model from a database table CodeSimth 模板
- Unable to update database to match the current model!
- An association from the table work_output refers to an unmapped class: org.ejs.sys.model.Part
- Database 相关的知识 - Update from/List down local files
- HOW TO: Update a Database from a DataSet Object Us