我有一个问题,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;
}
当在 DialogViewModel 中使用 CarService 进行查询以检索一些数据并进行一些更新时,它第一次运行良好。但是,当下次进行相同的查询以检索该数据时,它不会返回最新修改的数据,而是返回旧的/缓存的数据。使用 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>();
}
}
为什么没有返回正确的数据,我该如何解决?