Entity Framework – Update Model From Database, Part 2
2008-10-22 23:14
621 查看
Entity Framework – Update Model From Database, Part 2
Update Model from Database 是EDM 设计器的一个重要改进功能,支持增加新的数据库表和列,Model能够正确处理类型(Type)和属性(Property)的改名,能够检测继承和映射的改变。这里,我们简要介绍这一功能的使用及其限制。
上一篇文章《Entity Framework – Update Model From Database, Part 1》,链接地址:
http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx
接下来再次更新model,这次增加了上述2个新表。Model相关部分的更新如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/1007779265b1175729dc7a3932e3b4f0.jpg)
现在,我们从SupplierContract复制属性到Suppliers类型,并删除 SupplierContracts类型。接着到Suppliers 类型的表映射视图,通过点击<Add a Table or View> 单元,并选择 SupplierContracts,并映射Suppliers类型到SupplierContracts 表。映射视图如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/f492e7a57fbc70cc054582d973a18a30.jpg)
我们特别选中需要手动更改的地方:SuppliercontractID 列必须映射到Suppliers类型的ID属性,这是为了Entity Framework 理解如何构建合适的数据库查询。
接着,我们删除PremiumSuppliers 和Suppliers之间的关联,是PremiumSuppliers继承Suppliers类型。并删除PremiumSuppliers中的PremiumSupplierID属性,因为这个主键现在继承自Suppliers,修复后的映射如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/257e4d5d03db6e4a5474977c74cc22fb.jpg)
Model相关部分如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/4875d64ef074a7db7fec768457e93c8d.jpg)
最后,我们再次更新model,这次model不会发生变化。上述向导分析了映射,同时也注意到2个PK-to-PK的关联替换为:一个为继承关系;另一个映射一个类型到2个数据表。
关于向导限制的最后总结如下:
1. 当相应的数据库列更新时,不能自动更新类型的属性。
2. 不能重新添加实体类型(entity types)- 一旦你在model中删除了一个类型,重新添加这一实体类型的方法是手动创建,或者在XML编辑器中手动删除SSDL中相应的XML元素。
3. 也不能重新恢复属性。
4. 如果你更改类型的主键,所有当前的关联将丢失它们的identity,且将引入新的关联 – 你需要删除旧的关联。
5. 不能检测数据库对象的更名 – 更名意味着删除旧的对象,增加新的对象。
除了这些限制外,你也将发现这一新的功能不仅有用,而且适用。期待你的反馈。
英文链接:
1. ADO.NET team blog, Update Model From DB,
http://blogs.msdn.com/adonet/archive/2008/04/01/update-model-from-db.aspx
Update Model from Database 是EDM 设计器的一个重要改进功能,支持增加新的数据库表和列,Model能够正确处理类型(Type)和属性(Property)的改名,能够检测继承和映射的改变。这里,我们简要介绍这一功能的使用及其限制。
上一篇文章《Entity Framework – Update Model From Database, Part 1》,链接地址:
http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx
接下来再次更新model,这次增加了上述2个新表。Model相关部分的更新如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/1007779265b1175729dc7a3932e3b4f0.jpg)
现在,我们从SupplierContract复制属性到Suppliers类型,并删除 SupplierContracts类型。接着到Suppliers 类型的表映射视图,通过点击<Add a Table or View> 单元,并选择 SupplierContracts,并映射Suppliers类型到SupplierContracts 表。映射视图如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/f492e7a57fbc70cc054582d973a18a30.jpg)
我们特别选中需要手动更改的地方:SuppliercontractID 列必须映射到Suppliers类型的ID属性,这是为了Entity Framework 理解如何构建合适的数据库查询。
接着,我们删除PremiumSuppliers 和Suppliers之间的关联,是PremiumSuppliers继承Suppliers类型。并删除PremiumSuppliers中的PremiumSupplierID属性,因为这个主键现在继承自Suppliers,修复后的映射如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/257e4d5d03db6e4a5474977c74cc22fb.jpg)
Model相关部分如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/200810/4875d64ef074a7db7fec768457e93c8d.jpg)
最后,我们再次更新model,这次model不会发生变化。上述向导分析了映射,同时也注意到2个PK-to-PK的关联替换为:一个为继承关系;另一个映射一个类型到2个数据表。
关于向导限制的最后总结如下:
1. 当相应的数据库列更新时,不能自动更新类型的属性。
2. 不能重新添加实体类型(entity types)- 一旦你在model中删除了一个类型,重新添加这一实体类型的方法是手动创建,或者在XML编辑器中手动删除SSDL中相应的XML元素。
3. 也不能重新恢复属性。
4. 如果你更改类型的主键,所有当前的关联将丢失它们的identity,且将引入新的关联 – 你需要删除旧的关联。
5. 不能检测数据库对象的更名 – 更名意味着删除旧的对象,增加新的对象。
除了这些限制外,你也将发现这一新的功能不仅有用,而且适用。期待你的反馈。
英文链接:
1. ADO.NET team blog, Update Model From DB,
http://blogs.msdn.com/adonet/archive/2008/04/01/update-model-from-db.aspx
相关文章推荐
- 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 1
- 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