实体框架:部分更新记录不起作用

时间:2018-04-09 09:29:22

标签: entity-framework repository unit-of-work

我有以下设置:

enter image description here 注入所有实例,UnitOfWork和DataContext是单例。

我想对记录进行部分更新。 在通用存储库中,我的更新语句中包含以下代码:

reverseMessage

在我的更新方法中,我接受带有更新字段的字符串列表。

使用以下代码从usermanager调用此方法:

dbSet.Attach(entity);
if (updatedProperties != null)
{
   foreach (var property in updatedProperties)
   {
      unitOfWork.DataContext.Entry<TEntity>(entity).Property(property).IsModified = true;
   }
}

变量 processToDB 设置为true。我进入代码,我在变换跟踪器中看到实体在那里,但更新永远不会发生。

那么,是什么解决了这个问题,但我没有发现这是一个很好的解决方案,直接从通用存储库中的Update方法调用 SaveChanges 方法:

userRepo.Update(origUser, updatedProperties);
if(processToDB)
{
    unitOfWork.SaveChanges();
}

为什么在用户管理器上调用savechanges时它不起作用,它毕竟是相同的unitOfWork和DataContext(因为它们是单例)。

1 个答案:

答案 0 :(得分:0)

您无需为每个实体属性设置IsModified。在将EF模型初始化为

时,使用AutoDetectChangesEnabled属性并设置为true

DbContext.Configuration.AutoDetectChangesEnabled = true;

它将使EF跟踪您的实体对象上的更改。您可以使用进行检查 unitOfWork.DataContext(entity).State == EntityState.Modifed

如果上述情况恶化,请更新您的实体。

相关问题