2011-05-09 51 views
3

我面對關於從NHibernate的2.1.2 +流利的1.0 NHibernate的3.1 + 1.2流利的遷移問題:NHibernate的3.1遷移問題的LINQ

用來工作:

List<Order> orders = session.Linq<Order>() 
       .Where(o => o.OrderLines.Any(ol => printStatuses.Contains(ol.PrintStatus))) 
       .ToList(); 

不要工作了

List<Order> orders = session.Query<Order>() 
       .Where(o => o.OrderLines.Any(ol => printStatuses.Contains(ol.PrintStatus))) 
       .ToList(); 

我們得到以下錯誤:

「無法加載(典型值) e o.OrderLines。可能原因:該組件沒有被加載或沒有指定」

OrderLines是類秩序的集合屬性,類型IList的<訂單行>

NHibernate的似乎不能夠得到雖然,在會話工廠看,我們可以看到collectionRolesByEntityParticipant字典包含類OrderLine字典值的一個關鍵點至Order.Orderlines

有沒有人解決了這個問題?

編輯:

PS:我們在你不知道的情況下使用自動映射。

+1

你確定這是一個未處理的異常嗎?我經常在NHibernate 3中獲得第一次機會異常,如「無法加載類型x.y」,但它們不阻止查詢的工作。 – cremor 2011-05-11 09:08:55

+0

事實上,我很驚訝,即使我得到這些例外它似乎工作正常...我仍然有一些問題,我們另一種類型的查詢,但這是另一回事。謝謝 ! – Breakdown 2011-05-12 12:37:44

+0

任何解決方案呢? – Kiquenet 2011-11-02 15:27:05

回答

4

像@cremor提到的,這可能不是一個問題與nhibernate或您的應用程序。我遇到了同樣的問題。如果轉到「例外」對話框(Ctrl+Alt+E),則可能「檢查」所有「公共語言運行時例外」。當它們被檢查時,即使通過try catch來處理它,每當拋出一個異常時,visual studio也會進入調試器。通常,當你不依賴於你不擁有/控制的程序集時,你只能引用dll,而沒有pdb調試文件的副本。除非它具有pdb文件,否則Visual Studio不知道要闖入調試器。

TL; DR - 刪除NHibernate.pdb,Iesi.Collections.pdb,Nhibernate.ByteCode.Castle.pdb文件,Visual Studio不會闖入調試器並保持連續。

+0

你的解決方案可能已經工作,我們確實使用「公共語言運行時例外」來解決另一個問題。可悲的是,我不再在這個項目上工作,所以我不能確認... – Breakdown 2012-05-31 09:51:09

+0

這個解決方案完全爲我們工作。謝謝,Viggity! – CodeHxr 2012-11-09 22:16:00