2009-07-04 82 views
0

我想弄清楚如何在(N)Hibernate中最好地使用會話。我有一個ASP.NET客戶端使用的C#遠程對象(MarshalByRefObject)。 目前我的遠程處理類在構造函數中打開一個Session實例,並將其用於所有事務。這是一個好主意嗎?我會需要一個終結器的遠程對象session.dipose()被調用?休眠會話/事務設計

每個客戶端請求都會打開一個新的事務。現在我的數據庫訪問一般是這樣的:

ITransaction transaction = this.session.BeginTransaction(); 
try { 
// perfrom nhibernate query 
transaction.Commit(); 
} 
catch (Exception ex) { 
transaction.Rollback(); 
this.session.Flush(); 
} 

然後我經常返回檢索到的數據庫對象到客戶端。 這是處理這個問題的有效方法嗎?我應該在使用塊中使用事務對象還是調用Dispose()?回滾後需要session.Flush()嗎?

有時我有一個問題,當一個返回的集合綁定到一個GridView。它會拋出一個異常,指出某個對象的綁定屬性無效。這與hibernate返回代理對象有關嗎?爲什麼通過在一個查詢中進行休眠來收集對象是「真實」對象和代理對象的混合?

謝謝!

回答