根据NHibernate文档,当刷新会话时,SQL语句按以下顺序发出:
为什么强制按此顺序排列,是否有任何方法可以更改它,以便语句按照我给它们的顺序执行?
答案 0 :(得分:3)
这是顺序,因为它是最安全的。
不,你不能改变秩序。但是,你从来没有给NHibernate任何命令:你只是标记实体的持久性; NHibernate自动确定要做什么。
如果您认为需要对单个SQL操作进行更多控制,则可以使用IStatelessSession
而不是常规ISession
。你会丢失NH自动执行的所有操作(延迟加载,缓存,脏跟踪),但您可以(必须)明确说明何时Insert
,Delete
或Update
记录。< / p>
答案 1 :(得分:1)
根据上述内容,您无法更改NHibernate生成SQL的顺序,但您可以将工作单元分块。
例如:
using(var transaction = Session.BeginTransaction())
{
var company = Session.QueryOver<Company>().First();
var employee = new Employee{ ID = Guid.NewID() };
company.Employees.Add(employee);
Session.Flush();
var carSpace = new CarParkingSpace { EmployeeID = employee.ID };
Session.Save(carSpace);
transaction.Commit();
}
通过添加Session.Flush() - 该点的所有内容都将被推送到事务中。没有它,NHibernate会尝试创建一个分配给现有员工的停车位。