随笔-150  评论-554  文章-0 

Entity Framework – Update Model From Database, Part 2

Entity Framework – Update Model From Database, Part 2
 
Update Model from Database 是EDM 设计器的一个重要改进功能,支持增加新的数据库表和列,Model能够正确处理类型(Type)和属性(Property)的改名,能够检测继承和映射的改变。这里,我们简要介绍这一功能的使用及其限制。
 
上一篇文章《Entity Framework – Update Model From Database, Part 1》,链接地址:
 
接下来再次更新model,这次增加了上述2个新表。Model相关部分的更新如下:


现在,我们从SupplierContract复制属性到Suppliers类型,并删除 SupplierContracts类型。接着到Suppliers 类型的表映射视图,通过点击<Add a Table or View> 单元,并选择 SupplierContracts,并映射Suppliers类型到SupplierContracts 表。映射视图如下图所示:


我们特别选中需要手动更改的地方:SuppliercontractID 列必须映射到Suppliers类型的ID属性,这是为了Entity Framework 理解如何构建合适的数据库查询。
 
接着,我们删除PremiumSuppliers 和Suppliers之间的关联,是PremiumSuppliers继承Suppliers类型。并删除PremiumSuppliers中的PremiumSupplierID属性,因为这个主键现在继承自Suppliers,修复后的映射如下图所示:



Model相关部分如下图所示:



 
最后,我们再次更新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,

 

 

posted on 2008-10-21 07:59 EntLib 阅读(...) 评论(...) 编辑 收藏