我应该拆分我的edmx吗?

时间:2012-06-29 17:00:09

标签: c# .net entity-framework entity-framework-4 unit-of-work

我正在开发一个我想在不同的业务中安装的应用程序。每个企业可能需要此应用程序的不同部分。例如,该应用程序具有以下模块:公司管理,任务管理和簿记管理。有一家企业希望我只为他安装公司管理和簿记管理模块,而其他人则希望安装所有这三个模块。

那些模块(我有3个以上)坐在一个数据库中(历史原因),我不想分开数据库。此外,存在依赖关系 - 每个模块都应该了解公司管理模型,因为它包含所有客户,工人供应商等的列表。除此之外,每个模块都可以视为一个单独的应用程序。

应用程序是用C#.Net编写的,我正在使用实体框架。以下是我的解决方案中的项目列表:

  1. 数据文件夹
    • MyApp.Data.EF4 :包含工作单元和存储库模式的edmx和实现。我正在使用POCO,因此edmx不会创建实体。仅包含对MyApp.Common的引用。
  2. 模块文件夹
    • 常用文件夹
      • MyApp.Common :包含要实施的MyApp.Data.EF4项目的所有接口。
      • MyApp.Company.Domain :包含公司模块的域对象(PO​​CO)。该项目没有任何项目参考。
      • MyApp.Company.Services.Contract :包含此模块公开的服务的界面。
      • MyApp.Company.Services :包含服务实施。
    • 任务文件夹
      • MyApp.Tasks.Domain :包含“任务”模块的域对象(PO​​CO)。此项目仅引用MyApp.Company.Domain。
      • MyApp.Tasks.Services.Contract :包含此模块公开的服务的界面。
      • MyApp.Tasks.Services :包含服务实施。
    • 簿记文件夹
      • MyApp.Bookkeeping.Domain :包含Bookkeeping模块的域对象(PO​​CO)。此项目仅引用MyApp.Company.Domain。
      • MyApp.Bookkeeping.Services.Contract :包含此模块公开的服务的界面。
      • MyApp.Tasks.Services :包含服务实施。
  3. 演示文稿夹
    • MyApp.Web :引用所有其他模块服务,合同和域的Web应用程序。此特定Web应用程序应涵盖我所有模块的演示文稿。这意味着,只有需要所有模块的企业才能获得此Web应用程序。
  4. 因为我有非常大的edmx,这使得它很难管理,我想到了拆分edmx以便每个模块都有自己的edmx。这将导致MyApp.Web项目保留每个模块的工作单元(因为MyApp.Web使用所有模块,因此需要所有工作单元)。

    我在想是否将edmx分成不同的edmx对我来说是一个很好的做法。我会批评任何解释,这将有助于我决定这是一个好主意,还是对我的案例有任何好的解决方法。

1 个答案:

答案 0 :(得分:0)

我使用多个emdx文件是个好主意。它使系统的各个部分分开,这是一件好事。

然而,将有一大块数据库可以从多个edmx文件中访问。它只是这样结束:)在这种情况下要注意,如果您更改数据库,那么您可能必须更新这些多个edmx文件。它不是一个阻挡者,只是一个需要注意的事情。

话虽如此,那么: a)购买更多内存(Hardware is Cheap, Programmers are Expensive b)'冻结'旧的edmx并将新表放入新的emdx并仅进行增量更改

在更一般的层面上,如果你有一天没有拆分你的edmx,你的替换者会在StackOverflow上提出一个问题,其中包含以下行:“那些模块(我有3个以上)都坐在一个数据模型中(edmx)(历史原因)我不喜欢这个edmx。“ ;)