【发布时间】:2017-01-11 11:42:51
【问题描述】:
我很难理解 EF6 中的更改跟踪。
我有类似的代码。
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 方法中的代码中看到,我们有一个用户列表,我们正在修改该列表。
现在我知道这是可行的,这是我一直这样做的方式,但是我一直认为列表中的对象(在这种情况下为用户)是对 DBSet Local 集合中相应对象的引用.
经过一番思考,我不确定是否是这种情况,好像上下文已被处理,列表仍然被填充并且可以被操纵(我们只是失去了将它推回数据库的能力,而无需做一些额外的工作)所以从这个角度来看,列表中的项目必须是 DBSet Local 集合中项目的副本......但如果是这种情况,我不会认为操作列表中的对象会对对象中的对象产生任何影响dbset,因为它会是一个副本。
总结
问题是当我在 DBSet 上调用 ToList 时会发生什么,以及在这种情况下更改跟踪如何工作? - 我知道它确实有效,但我认为我目前的理解可能不正确。
【问题讨论】:
标签: c# entity-framework entity-framework-6 change-tracking