我们有多个有边界的上下文,有时需要对请求强制RefreshMode.StoreWins。
目前,我们分两步进行:
// Run my query, this handles refreshing WRT adds/deletes from other dbContext
var myThings = dbContext.Set<MyThing>()
.Where(x => x.blah)
.ToList();
// Get all entities in the change tracker.... any of them might have changed...!
var allEntities = DataContext.ChangeTracker.Entries().Select(c => c.Entity).ToList();
// Refresh all these entities, this handles refreshing WRT updates from other dbContext
(((IObjectContextAdapter)dbContext).ObjectContext).Refresh(RefreshMode.StoreWins, allEntities);
这是应用程序正确运行所必需的。
然而,它的效率非常低-我知道EF只是去数据库运行我的查询,但由于RefreshMode.ClientWins的一些内置默认值,它选择在内存中保留自己的副本。
我可以设置RefreshMode.StoreWins的一些全局默认值吗?或者,我可以在每个请求的基础上指示这一点吗?
注意:我们必须在给定屏幕的生命周期内保留DbContexts,我们不会为每个新请求重新生成。