3

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

但这似乎也是错误的。

4

2 回答 2

1

我认为多对多映射只是两个具有中间表的一对多映射的符号缩写,正如您所说的那样,可以简化关系。它仅适用于关系没有自身属性的情况。但是,随着对特定领域的理解的提高,我通常发现通常需要分解多对多映射以允许附加属性。所以这些天我通常的方法是总是简单地使用一对多的映射开始。

于 2011-03-17T22:16:40.410 回答
0

我不认为你的解决方法是错误的。这些模型的复杂性必须在某个地方进行编码。

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

于 2011-03-20T17:19:10.397 回答