JOS*_*OSE 4 .net entity-framework
我正在尝试使用Entity Framework更新循环中的记录,如下所示:
var data = userDetails.users.Where(x => x.IsAnonymous == true);
foreach(var item in data)
{
var updatedData = db.Users.FirstOrDefault(x => x.UserId == item.UserId);
updatedData.IsAnonymous = true;
db.Users.Attach(updatedData);
db.ObjectStateManager.ChangeObjectState(updatedData, EntityState.Modified);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
虽然attach(db.Users.Attach(updatedData);)我得到了例外
无法附加对象,因为它已经在对象上下文中.只有当对象处于未更改状态时,才能重新附加对象
我该如何解决这个错误?
如果这种情况发生在单个DbContext(或ObjectContext)的上下文中- 只需选择记录,更新所需的字段,然后继续.一旦你更新了所有记录 - 然后拨打.SaveChanges()一次.不需要Attach或ChangeObjectState打电话.....
var data = userDetails.users.Where(x => x.IsAnonymous == true);
foreach(var item in data)
{
var updatedData = db.Users.FirstOrDefault(x => x.UserId == item.UserId);
if(updatedData != null)
{
updatedData.IsAnonymous = true;
}
}
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
既然你已经选择了刚刚updatedData从db.Users一组数据-这已经是对象集的一部分-无需重新插入!只需更新您需要的内容,然后致电.SaveChanges()(最好是整批一次 - 每次记录不要一次......)