例外:无法附加对象,因为它已在对象上下文中

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);)我得到了例外

无法附加对象,因为它已经在对象上下文中.只有当对象处于未更改状态时,才能重新附加对象

我该如何解决这个错误?

mar*_*c_s 5

如果这种情况发生在单个DbContext(或ObjectContext)的上下文中- 只需选择记录,更新所需的字段,然后继续.一旦你更新了所有记录 - 然后拨打.SaveChanges()一次.不需要AttachChangeObjectState打电话.....

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)

既然你已经选择了刚刚updatedDatadb.Users一组数据-这已经是对象集的一部分-无需重新插入!只需更新您需要的内容,然后致电.SaveChanges()(最好是整批一次 - 每次记录不要一次......)