在我的项目中,我使用的是 EF Code First 4.3。有时,我必须调用执行繁重操作的存储过程,并且该操作会修改某些实体,但由于 EF DbContext 标识映射,除非创建新的 DbContext,否则我无法看到更改。
有没有办法在不重新创建 DbContext 的情况下做到这一点?我通过依赖注入得到它,我不想打破它,因为它非常方便。
在我的项目中,我使用的是 EF Code First 4.3。有时,我必须调用执行繁重操作的存储过程,并且该操作会修改某些实体,但由于 EF DbContext 标识映射,除非创建新的 DbContext,否则我无法看到更改。
有没有办法在不重新创建 DbContext 的情况下做到这一点?我通过依赖注入得到它,我不想打破它,因为它非常方便。
我认为您无法清除缓存,但您可以强制上下文重新加载特定实体。
要重新加载单个实体:
context.Entry(entity).Reload();
要重新加载特定类型的所有实体:
foreach (DbEntityEntry<T> entry in context.ChangeTracker.Entries<T>())
{
entry.Reload();
}
重新加载所有实体:
foreach (DbEntityEntry entry in context.ChangeTracker.Entries())
{
entry.Reload();
}