0
var user = userContext.Users.First(u => u.Id == 1);
user.Name = "John";
userContext.SaveChanges();

Name 列だけが変更されたことをどのようにしEFて確認し、それを更新するために SQL クエリを作成しますか?

はどのようEFにエンティティを追跡しますか?

データベースからエンティティを取得した後、エンティティのコピーをメモリに保持し、コンテキストから変更されたエンティティと比較しますか?

4

2 に答える 2

3

簡単な答えはイエスです。EFは、データベースから読み取られたデータの「元の」コピーを保持します。変更の追跡について詳しくは、MSDNをご覧ください。

于 2013-01-20T15:30:43.177 に答える
1

Entity Framework には、変更を追跡するモデルごとに Proxy クラスを生成するオプションがあります。基本的に、オブジェクトを自己追跡プロパティでラップします。

基本的に、次のような実装を想像できます (実際の内部構造はわかりませんが、これは理論に少し役立つはずです。それがどのように行われたかを正確に確認したい場合は、逆コンパイルできます)。

internal List<string> ChangedFields = new List<string>();

private string _name;
public string Name
{
    get { return _name; }
    set {
        ChangedFields.Add("Name");
        _name = value;
    }
}

明らかに、これがフィールドごとに複製されるため、変更を加えた各フィールドは で追跡されChangedFieldsます。

繰り返しますが、これは純粋に明示get的な/setでプロパティを使用してどのように機能するかを説明するためのものであり、特に Entity Framework がどのように機能するかではありません。

于 2013-01-20T16:07:35.603 に答える