1

n 層のシナリオでは、データ層はどのように EF 4.3 のオブジェクトの List プロパティを更新することになっていますか?

このクラスがあるとしましょう:

public class Foo
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<Bar> Bars { get; set; }
}

これは、ID と名前の保存/更新に関してはうまく機能しますが、Bars プロパティは無視されます。

protected void SaveChanges(Foo foo)
{
  this.Database.Entry<Foo>(foo).State = GetState(foo);
  this.Database.SaveChanges();
}

元のコンテキスト (Foo を取得したもの) がメモリ内にないため、データ レイヤーは Bars プロパティへの更新の保存をどのように処理する必要がありますか? どのバー項目が削除され、どの項目が更新され、どの項目が追加されたかを EF はどのように認識するのでしょうか?

注: 各 Bar アイテムをループして元のアイテムと比較することもできますが、EF はそのようには機能しないと思います。それは退屈で間違っているようです。

4

1 に答える 1

2

どのバー項目が削除され、どの項目が更新され、どの項目が追加されたかを EF はどのように認識するのでしょうか?

自分で永続化を作成する場合、変更についてどのように知る必要がありますか? 次の 2 つのオプションのいずれかを選択するとします。

  • データベースに現在の状態を照会し、それを受信した状態と比較して、何が変更されたかを見つけます。
  • クラスにいくつかのヘルパー フィールドを追加し、何が変更されたかをクライアントに知らせます。

どちらの場合も、変更に関する情報を使用して正しい SQL を生成します。

EF は最後のポイント (SQL 生成) のみを解決しますが、何が変更されたかを伝える責任があります。

于 2012-05-28T14:07:48.317 に答える