【发布时间】:2013-09-16 16:51:55
【问题描述】:
我正在处理 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 集合。
【问题讨论】:
标签: c#-4.0 nhibernate fluent-nhibernate linq-to-nhibernate queryover