【发布时间】:2011-07-10 19:23:05
【问题描述】:
我们正在寻求一种 ORM/域建模工具,它允许我们跨多个项目/程序集生成多个相关的域模型,这些项目/程序集以“数据库优先”的方法从我们的 MSSQL 数据库生成。我们需要一些帮助来确定哪些工具可以满足我们的需求。
要求是:
-
跨项目关系
- 我们的域被分成许多模块,对于每个客户(我们向其提供源代码)我们并不使用所有模块,因此我们希望“拔掉”他们不需要查看或查看的所有逻辑访问。
- 例如,我们希望将共享数据(主要是通用查找信息)存储在它自己的通用程序集中。
- 我们不需要模型之间的双向关系(因为这会导致循环引用)。只会生成关系的子端。
-
跨项目继承
- 与上述类似,我们希望能够将通用功能抽象为一个域模型中的基类并继承它们。
- 注意:域之间的继承链接将受到限制,每个子域只有一个或两个。
- 注意:这无关紧要,但我们使用“每个类型的表”或“Class Table Inheritance”在我们的关系 (DB) 架构中对继承进行建模
-
生成的类是:
- 标有 DataContract/DataMember 属性
- 通知属性更改(通过 INotifyPropertyChanged 实现)
- 具有部分 On*PropertyName*Changed() 方法(例如,根据 Linq to SQL 和实体框架生成的对象)
- (理想,但不是必需的)相关集合类型应实现 INotifyCollectionChanged。
对于任何支持(或具有支持)这些标准的 ORM 工具的任何反馈,我们将不胜感激!
注意:我们研究过的工具(但这并不能完全排除它们):
- LightSpeed(可爱,但不支持轻松跨项目继承)。
-
LLBLGen(复杂且包罗万象,但在使用
AsSeparateProjects模式进行分组时,它似乎不支持跨模型关系,更不用说继承了)。 - 实体框架(我刚刚迷路了...splitting the domain across multiple models 时的设计师故事不是很好)。
【问题讨论】:
-
LLBLGen Pro 不支持在选择 AsSeparateProjects 时跨组连接,因为该模型将导致多个 vs.net 项目。如果我们允许跨组边界的连接(如您所要求的),vs.net 项目最终会相互引用,这是不可能的,因为它会导致循环引用。
标签: .net entity-framework orm domain-model