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应该尊重映射,不是吗?
我也遇到这个问题,不幸的是我认为这是设计使然。NHibernate 3.0 Linq 提供程序在幕后使用 HQL,而 HQL 在这方面不支持您的映射。例如,如果你这样做了
session.CreateQuery("来自个人资料").List()
您只会获得所有配置文件的列表,即使您的映射具有 external-join=true,您的用户类也不会加入。
如果您使用的是使用 Critera API 的旧 NHibernate.Linq 提供程序,或直接使用 Criteria API:
session.CreateCriteria().List()
您将得到与用户外部连接的所有配置文件的列表,正如您的映射文件所请求的那样。
现在我不知道为什么 HQL 支持的 linq 提供程序不尊重您的映射(如果有人知道解决此问题的方法,请发帖),但我相信这就是您看到此行为的原因。