1

我在工作中使用实体框架并遇到了一些问题。

通常我听说创建包含与某些域相关的表的小型 Edmx 文件,即:Help Desk Edmx、HR Edmx 等。与其将所有表加载到一个大 Edmx 中,这会更简单,但出于性能考虑(在主要是设计和构建时间),这是不可行的。

我遇到了一些麻烦,首先是关于公共表,即:Employees Tables,它完全是 Edmx 的,当我使用 Employee 类引用并且对两个命名空间都有使用时发生冲突,然后我必须引用 Empoyee全名为 MyCompany.HelpDesk.Employee 的类。

看起来不自然。

我发现自己在所有 EDMX 中反复添加相同的表,这是一种返工,我花了几分钟时间在实体框架设计中添加一个表,因为我在添加表对话框中有 2k 个表。

也许 VS2012 可能是在同一个 Edmx 文件中加载 2k 表的解决方案(因为可以拆分设计器),但我不相信,因为它也会延迟编译,而不仅仅是打开设计器。

另一种选择可能是 Code First,但它没有一个像样的工具来将数据库逆向工程到类,因为它尝试从数据库加载所有表,大约需要 2 小时!

4

1 回答 1

1

您的问题通常没有解决方案。EF 支持某种方式在多个 CSDL文件之间共享公共实体,但它有很多缺点:

  • 设计器不支持它(如果 VS2012 设计器支持,我没有尝试过)->您将 EDMX 文件维护为 XML
  • 它仅在 CSDL 级别(类)上受支持 -> 您仍然有单个 SSDL(表)和 MSL(映射),您必须手动维护它们
  • 仅与共享实体的单向关系(共享实体只能具有与其他共享实体的导航属性)。

VS2012 将允许您在单个 EDMX 中处理多个图表,但我真的不知道这对于 2k 表会有多快。

恕我直言,2k 表听起来不像 EF 映射功能的用例——尤其是对于您希望为您生成代码的功能。大规模开发通常涉及大规模编码或开发自己的工具。您当前的方式(通过再次映射共享实体)是使用默认 EF 工具的最佳方式。

如果您为 POCO 类使用 T4 生成器,您甚至可以修改 T4 模板以对所有 EDMX 文件始终使用相同的类。POCO 类仅由类名映射 - 命名空间没有任何区别。这将需要您在 T4 生成器中投入一些精力,以确保共享类仅生成一次并从您的所有模型特定类中正确引用。

顺便提一句。启动应用程序并加载所有映射需要多长时间?您是否使用预生成的 EF 视图?

于 2012-07-17T09:00:38.683 回答