1

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

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

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

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

请帮忙。谢谢。

4

2 回答 2

2

对于这里的一个项目,我们做了以下工作:

也许一个重要的,是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();

也许这是您可以使用的东西?不确定相同的方法是否对您的情况有所帮助。

于 2016-09-21T11:13:41.740 回答
2

编辑实体的示例:

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

于 2016-09-21T12:38:40.010 回答