刷新会话时,SQL语句的Nhibernate顺序
根据NHibernate文档,当会话被刷新时,SQL语句按以下顺序发布:
为什么它会按照这个顺序被强制执行,并且有什么方法可以改变它,以便按照我给它们的顺序执行这些语句?
顺序是这样的,因为它是最安全的。
不,你不能改变顺序。 但是,你从来没有给NHibernate任何顺序:你只是标记实体的持久性; NHibernate确定自动执行的操作。
如果您认为您需要对单个SQL操作进行更多控制,则可以使用IStatelessSession
而不是常规的ISession
。 NH会自动执行所有这些工作(延迟加载,缓存,脏跟踪),但是您可以(必须)明确指出何时Insert
, Delete
或Update
记录。
你不能改变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会尝试创建一个分配给现有员工的停车位。
链接地址: http://www.djcxy.com/p/3983.html上一篇: Nhibernate order of SQL statements when flushing session