NHibernate:无法成功加载

Nic*_*hac 8 .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();
Run Code Online (Sandbox Code Playgroud)

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

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

Sco*_*and 3

我也遇到这个问题,不幸的是我认为这是设计使然。NHibernate 3.0 Linq 提供程序在幕后使用 HQL,而 HQL 在这方面不支持您的映射。例如,如果你这样做了

session.CreateQuery("来自个人资料").List()

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

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

session.CreateCriteria().List()

您将得到与用户外部连接的所有配置文件的列表,正如您的映射文件所请求的那样。

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