在mvc ef中更新相关表

时间:2016-09-21 10:51:11

标签: c# asp.net-mvc entity-framework controller editview

我有6张相关的表格。我正在使用视图模型来显示我视图中所有6个表的属性。我可以使用上面的结构在单个事务中添加数据。但是在编辑我得到的数据时 - "存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。"错误信息。

从消息看,似乎0行在某些表中受到影响。在我看来,可能不会编辑每个值。只会编辑属于某个表的某些值,而某些值将按原样存储。因此,如果一个表中的值完全没有编辑,如果我尝试执行以下操作,则弹出上述错误 -

db.Entry(tbl).State = EntityState.Modified;
db.SaveChanges();

有没有办法修改那些在编辑视图中编辑其值的表的实体状态?或者还有其他更好的方法吗?

请帮忙。感谢。

2 个答案:

答案 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循环中。