次のエンティティがあります
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public Sections Sections { get; set; }
}
public class Section
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Sections : List<Section>, ICollection<Section>
{ }
アイテム ID 1 の新しいアイテムを追加しましたが、セクションがありません...
ここで、アイテムを変更して新しいセクションを追加したいと考えています。そのために、そのアイテムをコンテキストで取得し、別のコンテキストに保存しています。ここでは、ユーザーがいつオブジェクトを更新するかわからないため、2 つの別個のコンテキストを使用する必要があります。それまでコンテキストオブジェクトを開いたままにすることはできません。
Item fAp;
using (var ctx = new MyContext())
{
fAp = ctx.Items.Include(a => a.Sections).Single(a => a.Id == 1);
}
using (var ctx2 = new MyContext())
{
var nsec = new Section()
{
ID = 1,
Name = "App Sec...1"
};
fAp.Sections.Add(nsec);
ctx2.Entry(fAp).State = EntityState.Modified;
ctx2.SaveChanges();
}
これにより、新しいセクションがデータベースに追加されませんでした。次に、コードを修正し、ctx2.SaveChanges() を呼び出す前に次の行を追加しました。
ctx2.Entry(nsec).State = EntityState.Added;
無事保存されました。
さて、私の問題は、非常に複雑なデータ階層があることです。つまり、Section クラスにも多くのサブ ナビゲーション プロパティがあり、それらのプロパティにもさらに多くのプロパティがあるということです。
そのようなすべてのプロパティを追跡し、それらの状態を手動で設定することは非常に困難です。この場合、どのようにデータを更新しますか?
もう 1 つ、熱心な読み込みは使用しません。つまり、Item オブジェクトの取得中に「Include」を使用しません。必要に応じて明示的な読み込みを使用し、最終的にオブジェクトを更新します。
最善の提案はありますか?