2011-05-09 65 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