我有以下设置:
注入所有实例,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(因为它们是单例)。
答案 0 :(得分:0)
您无需为每个实体属性设置IsModified
。在将EF模型初始化为
AutoDetectChangesEnabled
属性并设置为true
DbContext.Configuration.AutoDetectChangesEnabled = true;
它将使EF跟踪您的实体对象上的更改。您可以使用进行检查
unitOfWork.DataContext(entity).State == EntityState.Modifed
。
如果上述情况恶化,请更新您的实体。