我已经阅读了很多关于如何使用EF Code First和流畅配置配置多对多关系的知识。但我无法理解为什么我应该为联结表创建一个额外的实体。让我们假设我有以下实体:
Department
----------
Id
Name
Material
----------
Id
Name
现在我想保留每个部门的材料记录。所以我需要
DepartmentMaterial
-------------------
DepartmentId
MaterialId
Quantity
到目前为止我所阅读的内容我需要3个实体:Department,Material和DepartmentMaterial。所以实际上我将每个表映射到一个相应的实体,当我开始学习DDD时,这不是我打算做的。我假设EF将自动映射该联结表,并且还可以通过Department对材料数量进行查询。
因此,在EF Code First中是否可以在没有额外实体的情况下流畅地配置这种关系?
答案 0 :(得分: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)};