我遇到了一个关于从NHibernate 2.1.2 + Fluent 1.0迁移到NHibernate 3.1 + Fluent 1.2的问题:
曾经工作 :
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();
我们收到以下错误:
"无法加载 o.OrderLines 类型。可能的原因:程序集未加载或未指定。
OrderLines 是类 Order 的集合属性,类型化为 IList
NHibernate似乎无法获取该集合的完全限定类名。但是,查看会话工厂,我们可以看到collectionRolesByEntityParticipant 字典包含类 OrderLine 的键,其字典值指向 Order.Orderlines。
有没有人解决这个问题?
编辑:
PS :如果您想知道,我们使用自动映射。
就像@cremor提到的,这可能不是 nhibernate 或您的应用程序的问题。我遇到了同样的问题。如果转到"异常"对话框 ( Ctrl+Alt+E
),则可能已选中所有"公共语言运行时异常"的"抛出"。检查它们时,Visual Studio 将在每次引发异常时中断调试器,即使它由 try catch 处理也是如此。通常,当您依赖于不拥有/控制的程序集时,您只引用 dll,而没有 pdb 调试文件的副本。Visual Studio不知道闯入调试器,除非它有pdb文件。
TL;DR - 删除 NHibernate.pdb、Iesi.Collections.pdb、Nhibernate.ByteCode.Castle.pdb 文件和 Visual Studio 不会闯入调试器,并将继续运行。