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,
分类:
ASP.NET/C#/LINQ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!