0

私は Entity Framework の関係に問題があります。問題のほとんどは、Google の適切な検索フレーズを考え出すことができないことに起因していると確信しています。しかし..ここに問題があります...

既存のデータベースに 5 つのテーブルのセットがあります。これらのテーブルには、下の図に示す関係があります。

テーブルの関係

私のコード (Razor を使用した MVC4 ですが、言語に関係なく何が起こっているかは明らかなはずです) では、次のことを行っています。

<p>Store: @Model.StoreName</p>
@foreach (var storeDepartment in Model.StoreDepartments)
{ 
    <p>Department: @storeDepartment.Department.DepartmentName</p>
    <p>Items:</p>
    <ul>
        @foreach (var storeDepartmentItem in storeDepartment.Department.StoreDepartmentItems)
        {
        <li>@storeDepartmentItem.Item.ItemName</li>
        }
    </ul>
}

問題は、DepartmentID が現在の Store と同じである他のストア (および一部のアイテムを 2 回) からアイテム レコードを取得していることです。(複数の店舗で同じ DepartmentID を使用している理由は聞かないでください...私にはお答えできません)。

上記を説明するために、店舗 ABC の部門 ID が 1、名前がシャツであるとします。このデパート/ストアには、アイテム ID: 1、名前: グリーン シャツがあります。

Store DEF の部門 ID は 1、名前は Shirts です。このデパートには、アイテム ID: 1、名前: 緑のシャツ、アイテム ID: 2、名前: 赤のシャツがあります。

上記のストア ABC のコードでこれを実行すると、次のように表示されます。

ストア: ABC
部門: シャツ
アイテム:
- グリーン シャツ
- グリーン シャツ
- レッド シャツ

Entity Framework で StoreDepartmentItems のレコードを Department から取得して現在の StoreID を考慮する方法はありますか?

前もって感謝します、エヴァン

編集:明確にするために、行を変更することで重複を避けることができます:

@foreach (var storeDepartmentItem in 
    storeDepartment.Department.StoreDepartmentItems)

に:

@foreach (var storeDepartmentItem in 
    storeDepartment.Department.StoreDepartmentItems.Where(a=>a.StoreID == Model.StoreID))

しかし、それはビューの開発者により多くの圧力をかけているように思えますが、これは私の好みではありません。

4

1 に答える 1

0

StoreDepartmentItems から StoreId を削除しますが、図にはどれが主キーであるかが示されていませんが、DepartmentId は StoreId を持つ StoreDepartment にマップされるため、必要ないように思えます。

あなたの問題は、1 つの StoreDepartmentItem が現在の構造を持つ 2 つの異なる店舗に関連付けられる可能性があることです。

于 2013-05-25T07:04:08.973 に答える