为什么NHibernate使用session.Load()来往返数据库?
本文关键字:数据库 NHibernate 使用 session Load 为什么 | 更新日期: 2023-09-27 18:17:03
我用
var ap = new ActivityAppointment() {Activity = this.Session.Load<Activity>(appointmentId)};
创建DTO ActivityAppointment并将其保存到数据库。
ActivityAppointment有一个对Activity的引用,我用session.Load()设置了-但是现在,我已经确定,当我调用session.Load()时,NHibernate正在做一个到数据库的往返。我想,NHibernate只是创建一个代理对象,我可以将其作为引用分配给必须保存的DTO。
我也尝试了一个不存在的appointment -然后我得到一个异常
{"No row with the given identifier exists[Prayon.Entities.Activity#df659e2d-6f96-446f-b6ca-452816732a6c]"} System.Exception {NHibernate.ObjectNotFoundException}
我认为,NHibernate不知道这当它不做一个往返数据库-我认为应该是session.Load()的情况-或者我错了吗?
是否禁用了惰性加载(例如
如果你急切,加载到DB,因为没有代理(见这个问题NHibernate不创建代理,除非lazy=true)。No proxy -> sessionLoad hits DB -> unrecoverable exception.
官方文档:注意,如果没有匹配的数据库,Load()将抛出一个不可恢复的异常行。如果类是用代理映射的,则Load()返回一个对象,该对象是一个未初始化的代理,并且在调用该对象的方法之前不会实际访问数据库。如果您希望创建与对象的关联而不实际从数据库加载对象,则此行为非常有用。