下面的代码无法正确运行并抛出InvalidOperationExcepiton.
public void Foo()
{
DataContext context = new DataContext();
LinqEntity item = new LinqEntity(){ Id = 1, Name = "John", Surname = "Doe"} ;
context.LinqEntities.Attach(item, true);
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,实体在进行编辑时将使用所有字段来检查并发性。这就是引发 InvalidOperationException 的原因。
这可以将所有字段的更新检查属性设置为从不。必须在所有字段上执行此操作才能附加修改后的实体。如果完成此操作,对 context.SubmitChanges() 的额外调用将保存数据。
或者,如果您知道原始值,则可以附加然后进行更新,但正在检查的所有值都必须与原始值匹配。
LinqEntity item = new LinqEntity(){ Id = 1, Name = "OldName", Surname = "OldSurname"};
context.LinqEntities.Attach(item);
item.Name = "John";
item.Surname = "Doe";
context.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)