0

EF Code First と流暢な構成を使用して、多対多の関係を構成する方法について多くのことを読みました。しかし、ジャンクション テーブル用に追加のエンティティを作成する必要がある理由がわかりませんでした。次のエンティティがあると仮定します。

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

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

これからは、部門ごとに資料の記録をつけたいと思います。だから私は必要です

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

これまで読んだことには、Department、Material、DepartmentMaterial の 3 つのエンティティが必要です。したがって、実際には、各テーブルを対応するエンティティにマッピングしていますが、これは、DDD について学び始めたときに行うつもりはありませんでした。EF はそのジャンクション テーブルを自動的にマップし、材料の数量に関するクエリも Department に対して実行できると想定しました。

したがって、EF Code First で、追加のエンティティなしでそのような関係を流暢に構成することは可能ですか?

4

1 に答える 1

1

ジャンクション テーブルは、外部キーが 2 つしかない場合、概念モデル (クラス モデル) から除外できます ( 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 に答える