我有一个处于Detached状态的实体。实体上有2个字段 我不想更新。我将其IsModfied设置为false,但SQL SERVER中的属性仍在更新。如何强制这些列不更新SQL SERVER?
if (Context.Entry(updatedFoo).State == EntityState.Detached)
{
var oldEntity = Context.Foo.Find(updatedFoo.FooId);
Context.Entry(oldEntity).Property(x => x.createdUserId).IsModified = false;
Context.Entry(oldEntity).Property(x => x.createDateTime).IsModified = false;
Context.Entry(oldEntity).CurrentValues.SetValues(updatedSaving);
Context.Entry(oldEntity).State = EntityState.Modified;
}
****** ***** EDIT
设置EntityState以修改覆盖先前已设置的所有属性级别状态。
如果您将状态设置为已修改,然后在列上设置各个属性,则会出现以下错误
其他信息:不支持修改后的属性将IsModified设置为false
答案 0 :(得分:0)
翻转陈述的位置:
if (Context.Entry(updatedFoo).State == EntityState.Detached)
{
var oldEntity = Context.Foo.Find(updatedFoo.FooId);
Context.Entry(oldEntity).CurrentValues.SetValues(updatedSaving);
Context.Entry(oldEntity).State = EntityState.Modified;
Context.Entry(oldEntity).Property(x => x.createdUserId).IsModified = false;
Context.Entry(oldEntity).Property(x => x.createDateTime).IsModified = false;
}
因为在设置对象状态之前设置了IsModified
,所以每个属性都设置为IsModified = true
。
答案 1 :(得分:-1)
如果您不希望在DB中修改这些属性,那么,为什么不避免修改它们?如果这样做,它们将不会被标记为已更改。
我想你需要修改你的.SetValues
方法才能这样做。
如果您仍想出于某种原因修改这些属性,请在.SaveChanges
范围之外调用DbContext
或甚至更好之后再执行此操作。但是,我看不出有一个实体与数据库不同的原因。