gpt4 book ai didi

repository - 我什么时候需要刷新 Rhino Commons UnitOfWork?

转载 作者:行者123 更新时间:2023-12-04 07:08:56 26 4
gpt4 key购买 nike

当使用 Rhino Commons UnitOfWork(在 ASP-MVC 的 UnitOfWorkApplication 中)时,我喜欢使用 Rhino Repository 静态类来保存这样的实体:

Repository<Car>.Save(new Car(Id = 1));

我发现我可以在调用后立即使用以下命令将实体取出:
Car car = Repository<Car>.Get(1);

这工作正常。但是,当我像这样在 Rhino UnitOfWork 上使用 NHibernate Linq 提供程序时:
var allCars = (from rep in UnitOfWork.CurrentSession.Linq<Car>()
select rep).ToList();

我得到一个空列表。看来我必须先调用 UnitOfWork.Current.Flush() 才能像这样把车开出来。我不明白为什么,鉴于在幕后我假设两种检索方法都在查询相同的 session /工作单元。这是否意味着您应该在每次保存到数据库后调用 UnitOfWork.Current.Flush() ? NHibernate 不应该能够计算出何时刷新自己吗?还是我误解了什么?

最佳答案

好吧,虽然对存储库的 Get 调用可以使用 session 缓存,但可以“看到”缓存中保存的汽车:

Car car = Repository<Car>.Get(1); // This works because it uses the same session

linq 查询不使用 session 缓存:
var allCars = (from rep in UnitOfWork.CurrentSession.Linq<Car>()               
select rep).ToList(); // Does not work, even if it is in the same code block and even though it uses the same session

所以最佳实践是任何数据库更改(保存、更新、删除、插入)都应遵循:
UnitOfWork.Session.Flush(), 

或包裹在:
With.Transaction(delegate{
// code here
})

或使用 [Transaction] 装饰您的方法并使用 ATM。这将确保后续的 linq 查询将查看最新数据。

关于repository - 我什么时候需要刷新 Rhino Commons UnitOfWork?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com