EF IsModified = false仍在更新Underlyuing Column

时间:2015-11-30 15:13:48

标签: c# entity-framework

我有一个处于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

2 个答案:

答案 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或甚至更好之后再执行此操作。但是,我看不出有一个实体与数据库不同的原因。