NHibernate:无法成功加载

时间:2010-12-07 18:39:22

标签: .net nhibernate fluent-nhibernate linq-to-nhibernate

我正在使用NH3和FNH 1.1重新编译NH3。

我有一个用户模型,我希望在加载时始终检索其配置文件。我使用NH3的linq提供程序但不能使用它的Fetch方法(因为我的存储库隐藏了NHibernate并返回了IQueryable,并且在查询中调用了ToPagedList,因此阻止我将Fetch作为查询的最后一次调用)。

在我设置的UserMap中:

HasOne(x => x.Profile)
    .Not.LazyLoad()
    .Cascade.All();

但是将LazyLoad设置为OFF并没有帮助。我也玩过fetch模式。

我的期望是,如果我定义了这个映射,那么我甚至不必告诉Linq我希望在请求User实体时获取Profile。 Linq应该尊重映射,不是吗?

1 个答案:

答案 0 :(得分:3)

我也有这个问题,不幸的是我认为这是设计上的。 NHibernate 3.0 Linq提供程序使用了HQL,HQL在这方面不尊重您的映射。例如,如果你做了

  

session.CreateQuery(“来自个人资料”)。列表()

您只会获得所有配置文件的列表,即使您的映射具有outer-join = true,您的用户类也不会加入。

如果您使用的是直接使用Critera API或Criteria API的旧NHibernate.Linq提供程序:

  

session.CreateCriteria()。表()

您将获得所有与用户连接的外部配置文件的列表,就像您的映射文件请求一样。

现在我不知道为什么HQL支持的linq提供程序不尊重你的映射(如果有人知道解决方法,请发帖),但我相信这就是你看到这种行为的原因。