EF Code First 没有实体的多对多关系
Posted
技术标签:
【中文标题】EF Code First 没有实体的多对多关系【英文标题】:EF Code First Many to Many Relation Without an Entity 【发布时间】:2013-02-23 09:25:08 【问题描述】:我已经阅读了很多关于如何使用 EF Code First 和流畅配置来配置多对多关系的信息。但我不明白为什么要为联结表创建一个额外的实体。假设我有以下实体:
Department
----------
Id
Name
Material
----------
Id
Name
现在我想保留每个部门的材料记录。所以我需要
DepartmentMaterial
-------------------
DepartmentId
MaterialId
Quantity
到目前为止,我所阅读的内容需要 3 个实体:Department、Material 和 DepartmentMaterial。所以实际上我将每个表映射到一个相应的实体,这在我开始学习 DDD 时并不是我打算做的。我假设 EF 将自动映射该连接表,并且可以通过 Department 完成有关材料数量的查询。
因此,是否可以在 EF Code First 中流畅地配置这种关系而无需额外的实体?
【问题讨论】:
【参考方案1】:如果联结表只有有两个外键 (DepartmentId, MaterialId
),它就可以远离概念模型(类模型)。您想记录一些关于关联的数据。没关系,数量属于那里。一个部门有数量x
的材料y
。说一个部门有数量是没有意义的。
这不违反 DDD 原则。关联类是类模型中的一等公民。它甚至可以有自己的行为(例如限制某些部门/材料组合的数量)。
这意味着您的模型将不包含多对多关联,而是包含Department 1-n DepartmentMaterial n-1 Material
。还要通过联结表查询部门资料。这是很常见的情况。我在现实生活中几乎看不到纯接线表。它们是收藏品。
查询示例:
var query = from d in db.Departments
from dm in d.DepartmentMaterials
select new Department = d, Materials = dm.Select(x => x.Material);
【讨论】:
以上是关于EF Code First 没有实体的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
与 Code First Entity Framework 的单向多对多关系