我决定使用实体框架作为数据层。
我有超过 200 个表,还有两个问题:
1. 创建数据模型 (*.edmx) 时 - 我应该包括所有表(整个数据库)吗?
2. 稍后,我可以在数据模型中添加表吗?
2 回答
通常,您希望表示数据模型中的所有表,否则您无法将它们作为实体访问。对于像您这样的大型数据库架构的一种策略是将其拆分为单独的部分(单独的 .emdx 文件),这些部分共同构成数据模型 - 拥有单个 .edmx 模型可能会在某些时候减慢 VS - 我个人没有经历过这种情况,因此您必须自己尝试一下——从现有数据库创建初始模型很容易,而且不费吹灰之力。
您将能够在任何时候将表添加到数据模型中,集成向导允许您选择要添加的表,只需将其指向现有数据库即可。
我同意@BrokenGlass。VS 2010 SP1 应该改进了设计器的性能,这对于较大的模型效果更好,但单个模型中的 200 个表仍然太多。
ADO.NET 团队发表了两篇关于使用大型模型的文章:第 1部分和第 2 部分。一般来说,这些文章不仅是关于将您的映射拆分为多个 EDMX,而且还关于在多个 EDMX 中共享一些公共实体,这非常有用。如果没有此共享,您将无法在另一个 EDMX 中引用来自一个 EDMX 的实体。每个 EDMX 也会有自己的ObjectContext
. 将映射拆分为多个 EDMX 应基于某些架构决策:例如按组件拆分或按聚合根拆分。无论如何,使用多个 EDMX 会增加应用程序的复杂性,您仍然必须了解 EF 功能在多个 EDMX 上不起作用 - 例如,您不能在映射到不同 EDMX 的实体之上创建 linq-to-entities 查询.
我回答了一个问题,我在其中描述了如何在单个文件中使用多个 EDMX 文件的一些技巧,ObjectContext
但我建议在您必须使用该解决方案之前不要使用该解决方案 - 该解决方案的唯一有意义的用途是从数据库更新的实体的单独 EDMX 和定义的 SSDL 的单独 EDMX手动(例如自定义 DefiningQuery)。原因是从数据库功能更新将删除您的更改,因此将它们分开保存在永远不会更新的 EDMX 中会很有帮助。