我正试图弄清楚如何在(N)Hibernate中最好地使用Sessions。我有一个C#remoting对象(MarshalByRefObject),它被ASP.NET客户端使用。 目前我的远程处理类在构造函数中打开一个Session实例,并将其用于所有事务。这是一个好主意吗?我是否需要为调用session.Dipose()的远程对象提供终结器?
每个客户端请求都会打开一个新事务。现在,我的数据库访问通常如下所示:
ITransaction transaction = this.session.BeginTransaction();
try {
// perfrom nhibernate query
transaction.Commit();
}
catch (Exception ex) {
transaction.Rollback();
this.session.Flush();
}
然后我经常将检索到的数据库对象返回给客户端。 这是处理这个问题的有效方法吗?我应该在using块中使用事务对象还是在其上调用Dispose()?回滚后是否需要session.Flush()?
有时我将返回的集合绑定到GridView时会遇到问题。它抛出一个异常,指出某个对象的绑定属性无效。这与hibernate返回代理对象有关吗?为什么在一个查询中通过休眠收集的对象是“真实”和代理对象的混合?
谢谢!