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 。可能的原因:未加载或未指定程序集。”
OrderLines是Order类的集合属性,类型为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不会闯入调试器并继续保持稳定。