我正在处理 N+1 问题,我想在特定查询中急切加载集合,但是我收到“无法延迟初始化集合”错误,或者查询保持延迟加载。
我尝试了 stackmembers 给出的许多建议,但没有一个奏效。
我的实体示例:
public class Bar
{
private _IList<Foo> _fooList;
public IEnumerable<Foo> FooList {get{return _fooList;} }
}
地图示例:
HasMany(d => d.FooList)
.Access.CamelCaseField(Prefix.Underscore)
.KeyColumn("IdBar")
.Cascade.AllDeleteOrphan()
.Inverse();
抛出错误的查询(无法延迟初始化集合):
var test = GetSession().Query<Bar>()
.Fetch(b => b.FooList);
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.List();
查询仍然存在 N+1 问题:
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinQueryOver<Foo>(d => d.FooList)
.Where(f => f.Active).List<Bar>();
Foo fooAlias = null;
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinAlias(d => d.FooList, () => fooAlias)
.List();
我需要帮助来解决这个 N+1 问题,急切地加载 FooList 集合。