Nhibernate Hibernate会话/事务设计

Nhibernate Hibernate会话/事务设计,nhibernate,hibernate,session,transactions,Nhibernate,Hibernate,Session,Transactions,我试图找出如何在(N)Hibernate中最好地使用会话。我有一个C#remoting对象(MarshallByRefObject),它被ASP.NET客户端使用。 当前,我的远程处理类在构造函数中打开一个会话实例,并将该实例用于所有事务。这是个好主意吗?对于调用session.Dipose()的远程对象,我需要一个终结器吗 每个客户端请求都会打开一个新事务。现在,我的数据库访问通常如下所示: ITransaction transaction = this.session.BeginTransa

我试图找出如何在(N)Hibernate中最好地使用会话。我有一个C#remoting对象(MarshallByRefObject),它被ASP.NET客户端使用。 当前,我的远程处理类在构造函数中打开一个会话实例,并将该实例用于所有事务。这是个好主意吗?对于调用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返回代理对象有关吗?为什么hibernate在一个查询中收集的对象是“真实”对象和代理对象的混合体

谢谢

请参见我的答案: