我正在将NHibernate实现到现有的Web应用程序中.但是,我们还有一些其他进程可以在数据库上进行批量插入和更新.如何让NHibernate意识到后端数据库中发生的更改是通过NHibernate启动的?
我在asp.net中使用的NHibernate中读到的大部分信息都提到将Session对象存储在HttpContext或CallContext中.然后,这将在应用程序生命周期的持续时间内存储会话对象.这是我实施的.我担心在每个请求上初始化NHibernate的成本.在每个请求上初始化Session对象时,这种方法是否没有显着的性能损失?
另外,将SessionFactory存储在HttpContext或CallContext中是否更有意义,以便不必在每个请求上重新生成映射?
你不应该.NHibernate会话可以帮助您在ACID环境中工作,这意味着一个事务不知道任何并发事务.您应该使用执行少量操作的短会话.你不应该长时间举行会议.如果确实需要很长的时间来处理域对象,那么您应该分离然后将域对象重新附加到不同的会话.
一旦打开一个新会话,在会话打开之前对数据库所做的任何更改都将通过NHibernate提供.