FE6の変更トラッキングで何かを理解するのが苦労しています。ToList()を呼び出した後のエンティティフレームワークの変更トラッキング
私はこのようなコードを持っています。
public class SomeClass
{
private List<User> _users;
private DAL _dal;
public void ProcessUsers()
{
_users = _dal.GetUsers();
foreach(var u in users)
{
u.user.Comment = "This is a test";
}
_dal.SaveChanges();
}
}
DALクラスはこれと少し似ています。
public class DAL
{
...
private DataContext _context; // Assume that this is being newed up in a constructor.
public List GetUsers()
{
return _context.Users.ToList();
}
public void SaveChanges()
{
_context.SaveChanges();
}
}
だから我々はProcessUsersメソッドのコードから見ることができるよう、私たちはユーザーのリストを持っていると我々はそのリストを変更しています。
今私はこれがうまくいくことを知っていますが、私はいつもそれをやっていますが、私はいつもList(この例ではUsers)のオブジェクトがDBSet Localの対応するオブジェクトコレクション。
少し考えた後で、コンテキストが削除されているかのように私は確信していませんが、リストはまだ入力されていて操作できます(追加作業をせずにデータベースに戻す機能が緩んでいます)。 )そのような観点からは、リスト内の項目はDBSet Localコレクションの項目のコピーでなければなりませんが、それが当てはまる場合は、リスト内のオブジェクトを操作するとオブジェクトに何らかの影響を及ぼすことはありませんdbsetではコピーと同じように扱われます。
概要で
質問は、私がDBSetにToListメソッドを呼び出すときに何が起こるかで、どのようにこのインスタンスで作業を追跡変更するのでしょうか? - それはうまくいくのは分かっていますが、私の現在の理解は間違っていると思います。
まあ、いいえ、私の意見は、私が掲載したコードが壊れていないということです。 私は、DBSetのToList()が何をしているか理解したいだけです。リストにdbset Localコレクションの元のオブジェクトへの参照が設定されたとします。しかし、私が読んでいないものから、それらはコピーです - もしそうなら、変更の追跡はうまくいかず、上記のコードは失敗します。 – D3vy