2009-11-16 52 views
0

我目前正在學習NHibernate,我想要數據綁定到Web控件(即GridView)。GridView不會導致NHibernate代理加載關係

在我目前的例子裏,我用流利的NHibernate的映射兩張表對他們的業務對象(項目ProjectStatus)。我也有一個「項目有ProjectStatus」(多對一)關係。

項目類的結構:

Project.ID 
Project.Name 
Project.ProjectStatus.Name 
Project.ProjectStatus.Description 

當我結合項目的對象的列表(懶惰=「代理」)以一個GridView時,GridView不會觸發引用的表的負荷。因此,字段名稱說明的ProjectStatus被GridView控件忽略。

有沒有一種方法與數據綁定的GridView結合使用真正的延遲加載?

在此先感謝。

回答

2

這應該沒有任何問題。我懷疑問題在於數據綁定本身沒有訪問子對象的屬性。你如何綁定到ProjectStatus屬性?據我所知,你不能直接綁定到子對象。您必須在OnRowDataBound事件處理程序中設置值或使用Eval。

我會先創建一個OnRowDataBound處理程序,然後中斷DataRow。檢查即時窗口中的e.Row.DataItem以驗證是否正在加載子對象。如果是這樣,那麼問題在於綁定。

+0

如果你不想公開的OnRowDataBound事件,你可以爲子對象屬性的包裝屬性,如:public string StatusName {get {return ProjectStatus.Name; }} –

+0

感謝Jamie Ide,是的你是對的,手動訪問孩子並將它們添加到RowDataBound處理程序中的行解決了我的問題。你知道ADO.NET實體對象/代理的行爲是否一樣?或者數據綁定更容易? – motto

+0

@Motto - 不幸的是,這是數據綁定的一個限制,所以對象來自何處並不重要。我想你可以在沒有RowDataBound的情況下通過將一個import語句放入你的頁面並使用eval來解決它。 –

2

您是否將ISession存儲在請求上下文中,並在請求結束時將其刷新?如果不是,則應該在global.asax.cs的begin_ request方法中啓動一個新會話,將其存儲在請求上下文中,然後將其放回到end_request方法中,然後將其刷新。

+0

謝謝,我修復了數據綁定後遇到了這個問題。存儲會話似乎仍然很痛苦,因此存儲庫可以使用它。你有任何提示如何更容易地做到這一點?謝謝 – motto

相關問題