コードファーストのアプローチで作成された EntityFramework ベースのデータベースをここに持っています。データベースには、親子関係を持つ 2 つのテーブルが含まれています。
Orderlists
(モデル"Orderlist"に基づく)Orders
(モデル「注文」に基づく)
ここで Orderlists には、ICollection<Order> Orders
関連するすべての注文をリストする (!) 必要がある が含まれています。どういうわけかそうではありません。
コントローラーの DbContext には、次の 2 つの DbSet が含まれています。
DbSet<Orderlist>
DbSet<Order>
一方、モデルOrderには 2 つのプロパティがあります (括弧内に型を示します)。
int OrderlistId
Orderlist OrderList
新しいOrderオブジェクトの [HttpPost] Createメソッドのコントローラーで、DbContextから適切なOrderlistオブジェクト (正しく提供/選択された ID を持つ) を選択し、新しく作成されたOrderのOrderlistIdとOrderlistを設定して、この関係を結び付けています。オブジェクトを適切に選択し、選択したOrderlistのOrdersコレクションにOrderを追加します (null の場合はコレクションを作成します)。
それから私はdb.SaveChages();
それがすべきことをする a をします。
モデルのコードから最初にデータベースを生成すると、関係に関してはOrderlistIdプロパティのみがデータテーブルにフィールドを生成します。OrderlistのOrdersコレクションもOrderのOrderlistプロパティもテーブルにフィールドを生成しません。これはまだ有効なリレーションであるため問題ありません。Orderlist の ID はPKであり、OrderlistIdの値は正しく設定されています。データテーブルのスキームは、外部キーによる関係も反映しています。
ここでの問題は、アプリケーションの別の時点でデータを処理するときに関係が復元されないことです。Orders ICollectionは、DbContext から選択すると常に nullになります。
私の質問は次のとおりです。オブジェクトを作成するときに注文 ICollection
を自動的に入力する必要がありますか? または、の注文をDbContext
反復処理して手動で入力し、適切なすべての注文を関連する注文リストに手動で追加する必要がありますか? また、そうしなければならない場合、どこで、どのようにすればよいのでしょうか?DbSet
DbContext