使用限制时,Nhibernate ICriteria会导致选择N + 1

时间:2018-09-20 17:13:50

标签: nhibernate fluent-nhibernate

我有一个B列表的A类,我需要根据C进行过滤

这是地图

AMap

public AMap()
    {
    Id(x => x.IdA, "IdA").GeneratedBy.Identity();
    HasMany<B>(x => x.B)
        .BatchSize(50)
        .KeyColumn("IdA")
        .Cascade
        .AllDeleteOrphan()
        .Inverse()
        .Not.LazyLoad();  
}

BMap

 public BMap()
        {

            Id(x => x.IdB, "IdB").GeneratedBy.Identity();


            References(x => x.C, "IdC").LazyLoad();
            References(x => x.A, "IdA").LazyLoad(); 

            Setup();
        }

还有我的提取代码

//listC is a List<C> passed to the method


            var criteria = DetachedCriteria.For<A>()
                           .CreateCriteria("B", "b")                                    
                                .Add(Restrictions.Or(
                                        Restrictions.In("C.IdC", listC.Select(ug => ug.IdC).ToArray()),
                                        Restrictions.IsNull("C.IdC")))
                                .SetResultTransformer(Transformers.AliasToEntityMap);


            var result = criteria.GetExecutableCriteria(Session);



            return list;

NHibernate Profiler报告选择发生了N + 1次,并且性能很差。

我也尝试过使用QueryOver,但无法根据业务逻辑过滤结果

最后9个小时,我敲了敲头,我放弃了。

任何帮助都

0 个答案:

没有答案