我遇到了 EF 无法在 3 层 WPF 应用程序中返回最新数据的问题,我怀疑这与我处理上下文生命周期的方式有关。这是场景:
UnitOfWork 内包含多个存储库。还有一项服务 (MyService),它使用 UnitOfWork。此 UnitOfWork 还必须直接从 UI 调用,而不通过服务。
在主窗口的 ViewModel 中,我有时会创建一个新窗口(首先使用 ViewModel):
var dialog = new DialogViewModel(_eventAggregator, _unitOfWork, Container.Resolve<CarService>());
这个主窗口 ViewModel 有一个 UnitOfWork,它已被注入到构造函数中,并被传递给 DialogViewModel。
CarService 的构造函数还需要一个 UnitOfWork,它也被注入到其构造函数中:
public CarService(IUnitOfWork unitOfWork){
_unitOfWork = unitOfWork;
}
当 CarService 在 DialogViewModel 中使用来进行查询以检索一些数据并进行一些更新时,它第一次工作正常。但是,当下次进行相同的查询来检索该数据时,它不会返回最新修改的数据,而是返回旧的/缓存的数据。使用 UnitOfWork(在 CarService 内部)的查询如下所示:
var values = _unitOfWork.GarageRepository.GetSomeValues();
_unitOfWork.GarageRepository.MakeSomeChangesToTheValuesUsingStoredProcedure();
第二次调用时,值不包含最新版本的数据;但是它已在数据库中成功更新。
我正在使用 Unity 进行 DI,这就是我的容器的样子:
public class Container
{
public static UnityContainer Container = new UnityContainer();
// Called once in the AppBoostraper, as soon as the GUI application starts
public void BuildUp()
{
Container.RegisterType<IUnitOfWork, UnitOfWork>();
Container.RegisterType<ICarService, CarService>();
}
}
为什么没有返回正确的数据,我该如何修复它?