nhibernate复合键引用生成多个查询

nhibernate复合键引用生成多个查询,nhibernate,fluent-nhibernate,linq-to-nhibernate,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,我们在复合id中有keyreference,如下所示 表(“母公司”); 复合ID() .keyreference(e=>Obj,“样本”) 这将为父对象中的每一行生成单独的obj查询。如何解决这个问题? 主要是如何在这里为keyreference控制fetchstartegies(内部连接) 请帮助您可以调整keyreferencemapping。最简单的方法是禁用懒散加载 .KeyReference(e => e.Obj, c => c.Not.Lazy()); 但是,它将使用

我们在复合id中有keyreference,如下所示

表(“母公司”); 复合ID() .keyreference(e=>Obj,“样本”)

这将为父对象中的每一行生成单独的obj查询。如何解决这个问题? 主要是如何在这里为keyreference控制fetchstartegies(内部连接)


请帮助

您可以调整keyreferencemapping。最简单的方法是禁用懒散加载

.KeyReference(e => e.Obj, c => c.Not.Lazy());
但是,它将使用select而不是join。但是使用查询时使用联接

var loaded = session.Query<Parent>()
    .Fetch(c => c.Obj)
    .ToList();
var-loaded=session.Query()
.Fetch(c=>c.Obj)
.ToList();
注意:似乎Linq确实进行了急切获取,而QueryOver没有。这行不通

var loaded = session.QueryOver<Parent>()
    .Fetch(c => c.Obj).Eager
    .List();
var-load=session.QueryOver()
.Fetch(c=>c.Obj).Eager
.List();

Hei,这仍然运行多个查询。第一个查询看起来像
SELECT obj.Id,parent.*FROM parent join obj
还是
SELECT obj.*,parent.*FROM parent join obj
SELECT parent.*FROM parent
?我不明白为什么会接受这个答案;这是完全错误的,问题是它不是延迟加载,所以告诉它不要延迟加载是没有帮助的。(不,写
c.Lazy()
也不起作用。)@Aaronaught因为OP要求“获取startegies”,所以我认为他想急切地加载引用,所以不是懒惰加载的问题,这是他想要的。问题是它是一个SELECT N+1,而不是一个内部连接,我想如果它起作用的话,它可能会有用;不幸的是,事实并非如此。添加
Lazy
Not.Lazy
对行为没有任何影响。你自己试试看。