【问题标题】:EF Code First Many to Many Relation Without an EntityEF Code First 没有实体的多对多关系
【发布时间】: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 中流畅地配置这种关系而无需额外的实体?

【问题讨论】:

    标签: entity-framework-5 code-first junction-table


    【解决方案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)};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多