我在一个三层WPF应用程序中使用EF时遇到了问题,它没有返回最新的数据,我怀疑与上下文的生命周期处理有关。具体情况如下:
有几个仓储被封装在一个UnitOfWork中。还有一个服务(MyService),它使用UnitOfWork。必须直接从UI调用此UnitOfWork,而不通过服务传递。
在我的主窗口的ViewModel中,我创建了一个新窗口(使用ViewModel first):
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();
第二次调用时,values不包含最新版本的数据;但它已经在数据库中成功更新。
我正在使用Unity进行依赖注入,这是我的容器的样子:
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>();
}
}
为什么返回的数据不正确,我该如何修复?