NHibernate 3.1 与 Linq 的迁移问题

本文关键字:迁移 问题 Linq NHibernate | 更新日期: 2023-09-27 17:55:30

我遇到了一个关于从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 :如果您想知道,我们使用自动映射。

NHibernate 3.1 与 Linq 的迁移问题

就像@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 不会闯入调试器,并将继续运行。