【发布时间】:2011-03-17 19:29:50
【问题描述】:
这或多或少是一个笼统的问题,与任何特定的 ORM 或语言无关:无论您的 ORM 偏好如何,都会出现这个问题。
映射多对多关系时,可能会隐藏中间表或使中间表成为模型的一部分。如果中间表有超出关系的有价值数据,如何处理映射?
考虑下表:
CaseWorker (id, first_name, last_name)
CaseWorkerCases (case_worker_id, case_id, date_opened, date_closed)
Case (id, client_id, field_a, field_b)
作为一名程序员,我真的希望能够做到:
CaseWorker.Cases
比
CaseWorker.CaseWorkerCases.Cases
一方面,表 CaseWorkerCases 包含有用的数据,隐藏中间表使得访问该数据不太方便。另一方面,必须在中间表中导航会使访问 Cases 的常见任务看起来很尴尬。
我认为一种解决方案可能是在模型中公开中间表,然后为 CaseWork 对象提供一个可以工作的包装器属性。比如:
public IEnumerable<Case> Cases
{
get{return (from caseWorkerCase in this.CaseWorkerCases
select caseWorkerCase.Case);}
}
但这似乎也是错误的。
【问题讨论】:
-
我正在使用 DDD。其中大部分隐藏在服务层后面。我从事过一个隐藏中间表的项目。当 Linq 查询需要来自中间表的数据以及当您需要将该数据提供给演示者/视图时(例如,显示所有打开的案例、案例工作者和案例打开日期的 GridView),这会导致问题。对于这个项目,我采用了两层方法,但我不喜欢它产生的“丑陋”代码。
标签: nhibernate entity-framework orm many-to-many domain-model