0

我已经阅读了很多关于如何使用 EF Code First 和流利的配置来配置多对多关系的内容。但我不明白为什么要为联结表创建一个额外的实体。假设我有以下实体:

Department
----------
Id
Name

Material
----------
Id
Name

现在我想保留每个部门的材料记录。所以我需要

DepartmentMaterial
-------------------
DepartmentId
MaterialId
Quantity

到目前为止,我所阅读的内容需要 3 个实体:Department、Material 和 DepartmentMaterial。所以实际上我将每个表映射到一个相应的实体,这在我开始学习 DDD 时并不是我打算做的。我假设 EF 将自动映射该连接表,并且可以在 Department 上完成有关材料数量的查询。

因此,是否可以在 EF Code First 中流畅地配置这种关系而无需额外的实体?

4

1 回答 1

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)};
于 2013-02-23T13:36:24.760 回答