ORM和多对多关系

时间:2011-03-17 19:29:51

标签: nhibernate entity-framework orm many-to-many domain-model

这或多或少是一般性问题,而不是特定的任何特定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);}
}

但这似乎也错了。

2 个答案:

答案 0 :(得分:1)

我将多对多映射视为与中间表的两个一对多映射的符号缩写,正如您所说的那样,可以简化关系。它只适用于关系没有自己属性的情况。但是,随着对特定域的理解的改进,我通常会发现通常需要分解多对多映射以允许附加属性。所以我现在常用的做法是始终只使用一对多的映射。

答案 1 :(得分:0)

我认为您的解决方法不对。这些模型的复杂性必须在某处进行编码。

我有一篇关于这个确切主题的博文:Many-to-many relationships with properties