在企业项目中管理实体框架(包含数百个表)

时间:2012-07-17 01:47:23

标签: entity-framework entity-framework-4 ef-code-first code-first

我在工作中使用Entity Framework并遇到了一些问题。

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

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

看起来不自然。

我发现自己在所有EDMX上都反复添加相同的表,这是一个返工,我花了一些时间在实体框架设计中添加一个表,因为我在Add Table Dialog中有2k表。

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

另一种选择可能是Code First,但它没有一个合适的工具来将数据库反向工程到类,因为它试图从数据库加载所有表,大约2个小时!#/ p>

1 个答案:

答案 0 :(得分:1)

您的问题通常无法解决。 EF支持share common entities across multiple CSDL文件的某种方式,但它有很多缺点:

  • 设计师不支持(如果VS2012设计师支持,我没试过) - >您将以XML格式维护EDMX文件
  • 仅支持CSDL级别(类) - >你仍然有单一的SSDL(表格)和MSL(映射),你必须维护它们
  • 只有与共享实体的单向关系(共享实体只能向其他共享实体提供导航属性)。

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

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

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

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