首页 > 解决方案 > EF6 模型分离

问题描述

我试图让多个程序引用一个通用模型,但不确定如何正确设计它以供重用。并非所有程序都需要模型的所有部分,但从源代码控制的角度来看,id 不希望拥有不同版本的模型。

我在 EF6 中创建了一个(简化的)模型,其中包含以下内容:

Locations
Materials
Formulas

我的业务逻辑可以将材料添加到公式或位置:

AddMaterialToLocation(Material material)
AddMaterialToFormula(Material material)

引用程序一需要以上所有内容。它有一个配方系统和一个仓库,所以它想同时使用上述两个功能。

然而引用程序二只有一个仓库,它不需要公式。然而,参考模型仍然存在。(程序二完全在不同的数据库/PC上)

当然,材料或仓储的任何更改都应作为通用模型的更新应用,同时更新两个程序。

我已经研究过以下方式: -

  1. 将模型全部连接在一起,但让程序二不费心去调用它不需要的部分。
  2. 将模型分成两部分。一半有两个表/实体类(位置/材料),另一半有(公式/材料)。这允许程序二只创建它需要的模型部分。
  3. 将模型分成三部分,每个表/类一个。每个程序是否单独构建零件并仅使用基本类型在它们之间传递/转换?
    AddMaterialToLocation(int MaterialCode, string MaterialName)

无论如何,引用应用程序都将在演示者中建立自己的视图模型,因此在之后将较小的部分附加在一起就可以了。

上述解决方案似乎提出了以下缺点:-


选项 1 - 最终会为程序 2 创建大量未使用的实体。
选项 2 - 将有两个相同的材料实体(这也将是相同的数据库表)
选项 3 - 将有很多 edmx。没有任何东西会被链接 - id 松散的导航属性等。

有没有更好的办法?

标签: c#design-patternsdatabase-designentity-framework-6

解决方案


每个问题域都有自己的解决方案空间,并有其特定的业务模型。

当您尝试为程序一创建模型时,它有自己的模型,该模型不再存在于其定义中(选项 1 的缺点)。

当两个程序在机器和数据库中完全分离时,为什么要相互依赖?

也许稍后您想对程序一应用任何在程序二中不必要的更改,这会给您带来复杂性!

但是如果您的通用模型对两个程序有相同的数据(共享数据),您可以使用一些解决方案,例如微服务用于通用模型。(我不知道您的程序详细信息)


推荐阅读