我正在尝试附加一个从未从数据库中“拉出”的实体并让它更新现有行。例如,我在 MVC(已修改)中传递了一个完整的模型,我只是想在没有往返的情况下保存它以首先获取实体,然后进行编辑,因为我已经有了上一次调用的信息。
我所拥有的是:
public static int ModifyExistingEntity<T>(this DbContext db, T updated) where T : class
{
DbSet<T> set = db.Set<T>();
set.Attach(updated);
db.Entry(updated).State = EntityState.Modified;
return db.SaveChanges();
}
但是当我运行它时,我得到了这个:
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:存储更新、插入或删除语句影响了意外的行数 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。---> System.Data.OptimisticConcurrencyException:存储更新、插入或删除语句影响了意外的行数 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
这意味着没有任何更新。我在这里想念什么?主键设置正确,但请记住,实体不是从数据库中提取的,它是根据先前查询的信息 + 更新构建的。