【发布时间】:2012-12-24 15:42:01
【问题描述】:
我正在尝试使用Session.Update 更新实体,然后继续执行另一个 SQL 查询。另一个查询没有看到更改的值。当我使用分析器跟踪它时,Session.Update 什么也没做。
public class InvoiceService()
{
public void Update(Invoice invoice)
{
using (var trans = BeginTransaction())
{
Session.Update(invoice); //Nhibernate did not update invoice.
ExecuteNamedQuery(); //Query executed before invoice updated.
trans.Commit(); //Invoice updated.
}
}
}
然后我在 Session.Update 之后添加 Session.Flush。
using (var trans = BeginTransaction())
{
Session.Update(invoice);
Session.Flush()
ExecuteNamedQuery();
trans.Commit();
}
Session.Flush 执行后,更新的 SQL 查询也会执行。
它完美地工作。执行顺序正确。但后来我执行了另一种方法来获取所有发票。提交事务使 nhibernate 执行更新查询,以便更早地使用旧值更新我更新的发票。 (例如:数量 = 20,更新为 10,然后再次更新为 20)
public void FindAll()
{
using (var trans = BeginTransaction())
{
var invoices = Session.CreateCriteria<Invoice>().List<Invoice>();
trans.Commit(); // In here invoice that i updated earlier get updated again, using old values.
return invoices;
}
}
为什么又要更新了?
有什么办法可以解决这个问题?
提前致谢。
【问题讨论】:
标签: sql-server nhibernate