这或多或少是一般性问题,而不是特定的任何特定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包含有用的数据并隐藏中间表使访问该数据不方便。另一方面,必须浏览中间表使访问案例的常见任务看起来很尴尬。
我认为一个解决方案可能是在模型中公开中间表,然后给CaseWork对象一个包装器属性可以工作。类似的东西:
public IEnumerable<Case> Cases
{
get{return (from caseWorkerCase in this.CaseWorkerCases
select caseWorkerCase.Case);}
}
但这似乎也错了。
答案 0 :(得分:1)
我将多对多映射视为与中间表的两个一对多映射的符号缩写,正如您所说的那样,可以简化关系。它只适用于关系没有自己属性的情况。但是,随着对特定域的理解的改进,我通常会发现通常需要分解多对多映射以允许附加属性。所以我现在常用的做法是始终只使用一对多的映射。
答案 1 :(得分:0)
我认为您的解决方法不对。这些模型的复杂性必须在某处进行编码。
我有一篇关于这个确切主题的博文:Many-to-many relationships with properties