我試圖綁定從NHibernate會話拉到DataGridView的對象,並遇到問題。將NHibernate代理對象綁定到DataGridView
我有一個會話,在該會話中,我獲取所有綁定到組合框的「查找」項目,然後查詢對象本身。不知何故,這仍然導致主對象上的代理子對象。我甚至將查找項目的映射更改爲渴望獲取,但我仍然以某種方式獲取代理。
這裏是我正在獲取的對象:
Dim _makes As IList(Of Make) = session.QueryOver(Of Make).List
Dim _models As IList(Of Model) = session.QueryOver(Of Model).List
Dim _cars as IList(of Car) = session.QueryOver(of Car).List
' A car has a .Make and a .Model that are picked from a DGV ComboBox Column
,因爲我去通過他們的會議不會查詢汽車的品牌或型號的數據庫,因爲它認爲它已經在其高速緩存。如果是這樣的話 - 爲什麼它是代理對象呢?
由於我似乎無法避免代理,我想知道什麼是將這些對象綁定到DataGridView的最佳方法是。
我見過幾篇文章討論這個問題,例如:NHibernate proxy causing problems with databinding,但它已經過了幾年了,從那以後NHibernate發生了很大的變化。現在是否有任何新的或更好的解決方案解決這個問題?
在此先感謝。
編輯 我從這篇文章得到一些見解後發佈了另一個問題。我也發現了一個簡單的解決方案 - 你可以在這裏看到:Binding a collection of objects to a ComboboxColumn in a DataGridView
這是有道理的,但它似乎並沒有解決問題。我已經瀏覽了代碼並觀察了這個代碼被執行了,我也試着簡單地做一個.Fetch()。它仍然會導致代理對象,即使查詢繼續並再次從數據庫請求完整數據(即使它仍在緩存中)。任何其他想法? – Origin
謝謝您的建議。我誤解了NHibernate的部分內容,也沒有完全理解我讀過的一些博客文章。我遇到的問題似乎更多的是以數據綁定爲中心。一旦我處理了這個紅鯡魚,我會再看看NHibernate的一面。 – Origin
只需要我的2美分:) 我不建議你直接在你的GUI組件(Datagrids,DropDown等)中使用你的NHibernate映射實體。 它可能會導致您遇到問題,如選擇N + 1(再次)或甚至更糟糕的情況:如果您的ISession對象在運行時關閉,則可以獲取異常。 – cidico