我有6张相关的表格。我正在使用视图模型来显示我视图中所有6个表的属性。我可以使用上面的结构在单个事务中添加数据。但是在编辑我得到的数据时 - "存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。"错误信息。
从消息看,似乎0行在某些表中受到影响。在我看来,可能不会编辑每个值。只会编辑属于某个表的某些值,而某些值将按原样存储。因此,如果一个表中的值完全没有编辑,如果我尝试执行以下操作,则弹出上述错误 -
db.Entry(tbl).State = EntityState.Modified;
db.SaveChanges();
有没有办法修改那些在编辑视图中编辑其值的表的实体状态?或者还有其他更好的方法吗?
请帮忙。感谢。
答案 0 :(得分:0)
对于这里的项目,我们做了以下工作:
也许是一个重要的方法,是Context.People.Attach()
方法。
Context.People.Attach(person);
// Disable validation otherwise you can't do a partial update
Context.Configuration.ValidateOnSaveEnabled = false;
Context.Entry(person).Property(x => x.AddressId).IsModified = true;
Context.Entry(person).Property(x => x.Birthday).IsModified = true;
Context.Entry(person).Property(x => x.Name).IsModified = true;
...
await Context.SaveChangesAsync();
也许这是你可以使用的东西?不确定相同的方法是否对您的案例有所帮助。
答案 1 :(得分:0)
编辑实体的示例:
//Get the database entry
var entity = db.Person.First(c=>c.ID == 1);
//OR
//Attach a object to the context, see Nsevens answer.
db.Person.Attach(entity);
//Change a property
entity.Job = "Accountant";
//State it's a modified entry
db.Entry(entity).State = EntityState.Modified;
//Save
db.SaveChanges();
如果您要编辑多个条目,则需要将每个条目设置为EntityState.Modifed
,例如在foreach
循环中。