域建模工具建议 - 跨项目关系和继承

时间:2011-03-08 02:41:18

标签: .net entity-framework orm domain-model

我们正在使用ORM /域建模工具,它允许我们在MSSQL数据库中以“数据库优先”方法生成的多个项目/程序集中生成多个相关的域模型。我们需要一些帮助来确定哪些工具可以满足我们的需求。

要求是:

  1. 跨项目关系

    • 我们的域分为多个模块,每个客户端(我们提供源代码)都没有使用所有模块,因此我们想“拔掉”他们不需要查看的所有逻辑或者获得访问权。
    • 例如,我们希望在其自己的通用程序集中存储共享数据(主要是常见的查找信息)。
    • 我们不需要模型之间的双向关系(因为这会导致循环引用)。只会生成关系的孩子结束。
  2. 跨项目继承

    • 与上面类似,我们希望能够在一个域模型中将常用功能抽象为基类并继承它们。
    • 注意:域之间的继承链接将受到限制,每个子域只有一个或两个。
    • 注意:没关系,但我们使用“每个类型的表”或“Class Table Inheritance”来模拟我们的关系(DB)架构中的继承
  3. 生成的类应为:

    1. 使用DataContract / DataMember属性标记
    2. 通知属性更改(通过INotifyPropertyChanged实施)
    3. 具有部分On * PropertyName * Changed()方法(例如,根据Linq to SQL和Entity Framework生成的对象)
    4. (理想,但不是必需)相关集合类型应实现INotifyCollectionChanged。
  4. 对于支持(或有解决方案支持)这些标准的任何ORM工具的任何反馈都将不胜感激!

    注意:我们已经查看过的工具(但这并不完全排除它们):

    • LightSpeed(可爱,但不容易支持跨项目继承)。
    • LLBLGen(复杂且包罗万象,但在使用AsSeparateProjects模式进行分组时,它似乎不支持跨模型关系,更不用说继承了。)
    • 实体框架(我刚刚迷失了...... splitting the domain across multiple models不太好的设计师故事。)

2 个答案:

答案 0 :(得分:1)

这绝对需要小型概念验证项目,因为您的要求不是关于EF的论文中常见的内容。

对于1.和2.阅读这些文章(part 1part 2)并尝试制作简单的解决方案,证明您能够在多个EDMX中使用关系和继承。< / p>

用于从EDMX生成类的自定义T4模板将满足最后一点 - 从POCO模板开始并更改其生成功能。

答案 1 :(得分:1)

虽然听起来可能与你所要求的相反,但我可能会看EF Code First。因为它都是建立在POCO,DbSets和DbContext类之上,所以你可以很容易地获得继承。

在公共程序集中包含共享模型和抽象DbContext。在客户特定的程序集中具有特定模型和最终DbContext。

在WinForms前端,example code here有关于如何使集合可观察的问题。你需要自己处理INotifyPropertyChanged,但这很容易。

EF Code First的缺点是你无法生成所有类。话虽这么说,但它们很简单,我可能只是在编写应用程序的其余部分时根据需要编写它们。任何形式的通用自动化工具都无法确定哪些模型和属性与特定于客户的属性相同。