Linq的NHibernate 3.1迁移问题

我正面临从NHibernate 2.1.2 + Fluent 1.0迁移到NHibernate 3.1 + Fluent 1.2的问题:

曾经工作 :

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

不再工作了

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

我们收到以下错误:

“无法加载类型o.OrderLines 。可能的原因:未加载或未指定程序集。”

OrderLinesOrder类的集合属性,类型为IList

NHibernate似乎无法获得该集合的完全限定类名。 但是,查看会话工厂,我们可以看到collectionRolesByEntityParticipant字典包含OrderLine类的键,其字典值指向Order.Orderlines

有人解决过这个吗?

编辑:

PS:我们使用自动化,以防你想知道。

就像@cremor提到的那样,这可能不是nhibernate或你的应用程序的问题。 我遇到了同样的问题。 如果您转到“例外”对话框( Ctrl+Alt+E ),则可能已对所有“公共语言运行时例外”选中“抛出”。 检查它们时,每当抛出exception时,visual studio都会进入调试器,即使它是由try catch处理的。 通常,当您对不具有/控制的程序集具有依赖关系时,您只引用该DLL并且没有pdb调试文件的副本。 除非具有pdb文件,否则Visual Studio不知道要进入调试器。

TL; DR – 删除NHibernate.pdb,Iesi.Collections.pdb,Nhibernate.ByteCode.Castle.pdb文件和visual studio不会闯入调试器并继续保持稳定。