0

我正在处理 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 集合。

4

2 回答 2

0

映射应该使用

.Access.ReadOnlyPropertyThroughCamelCaseField

反而。

于 2013-09-29T12:53:36.680 回答
0

你用过HQL... LEFT JOIN FETCH ...吗?它也提供了同样的问题吗?

于 2013-09-18T10:48:41.587 回答