2

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

要求是:

  1. 跨项目关系

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

    • 与上面类似,我们希望能够将通用功能抽象为一个域模型中的基类并继承它们。
    • 注意:域之间的继承链接将受到限制,每个子域只有一个或两个。
    • 注意:这无关紧要,但我们使用“每个类型的表”或“类表继承”来建模我们在关系(DB)模式中的继承
  3. 生成的类是:

    1. 标有 DataContract/DataMember 属性
    2. 通知属性更改(通过 INotifyPropertyChanged 实现)
    3. 具有部分 On*PropertyName*Changed() 方法(例如,根据 Linq to SQL 和实体框架生成的对象)
    4. (理想,但不是必需的)相关集合类型应实现 INotifyCollectionChanged。

任何支持(或有支持的变通方法)这些标准的 ORM 工具的任何反馈都将不胜感激!

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

  • LightSpeed(可爱,但不支持轻松跨项目继承)。
  • LLBLGen(复杂且包罗万象,但在使用AsSeparateProjects模式进行分组时,它似乎不支持跨模型关系,更不用说继承了)。
  • 实体框架(我刚刚迷路了......将域拆分为多个模型时的设计师故事不是很好)。
4

2 回答 2

1

虽然听起来可能与您所要求的相反,但我可能会查看EF Code First。因为它都建立在 POCO、DbSets 和 DbContext 类之上,所以您将能够很容易地使继承工作。

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

在 WinForms 前端,这里有示例代码说明如何使集合可观察。您需要自己处理 INotifyPropertyChanged ,但这很容易。

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

于 2011-03-08T19:58:47.913 回答
1

这肯定需要小型概念验证项目,因为您的要求不是关于 EF 的论文中通常描述的内容。

对于 1. 和 2. 阅读这些文章(第 1部分,第 2 部分)并尝试制作简单的解决方案,这将证明您能够在多个 EDMX 之间使用关系和继承。

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

于 2011-03-08T07:48:16.880 回答