使用CriteriaAPI在NHibernate中急切地加载集合

使用CriteriaAPI在NHibernate中急切地加载集合,nhibernate,nhibernate-mapping,criteria-api,detachedcriteria,createcriteria,Nhibernate,Nhibernate Mapping,Criteria Api,Detachedcriteria,Createcriteria,我有一个实体A,它有许多实体B和实体C。所有实体A、B和C都有一些引用x、y和z,它们应该被急切地加载 我希望从数据库中读取所有实体A,并使用CriteriaAPI加载B和C的集合。 到目前为止,我能够急切地获取“A”中的参考资料。但是当集合被加载时,其中的引用被延迟加载 我是这样做的 AllEntities_A = _session.CreateCriteria(typeof(A)) .SetFetchMode("x",

我有一个实体A,它有许多实体B和实体C。所有实体A、B和C都有一些引用x、y和z,它们应该被急切地加载

我希望从数据库中读取所有实体A,并使用CriteriaAPI加载B和C的集合。 到目前为止,我能够急切地获取“A”中的参考资料。但是当集合被加载时,其中的引用被延迟加载

我是这样做的

            AllEntities_A =
            _session.CreateCriteria(typeof(A))
            .SetFetchMode("x", FetchMode.Eager)
            .SetFetchMode("y", FetchMode.Eager)
            .List<A>().AsQueryable();
allenties\u A=
_会话.创建标准(类型(A))
.SetFetchMode(“x”,FetchMode.Eager)
.SetFetchMode(“y”,FetchMode.Eager)
.List().AsQueryable();
使用Fluent对实体A的映射如下所示_B和C分别是A中B&C的私有IList

        Id(c => c.SystemId);
        Version(c => c.Version);
        References(c => c.x).Cascade.All();
        References(c => c.y).Cascade.All();

        HasMany<B>(Reveal.Property<A>("_B"))
            .AsBag()                
            .Cascade.AllDeleteOrphan()
            .Not.LazyLoad()
            .Inverse()
            .Cache.ReadWrite().IncludeAll();
        HasMany<C>(Reveal.Property<A>("_C"))
            .AsBag()
            .Cascade.AllDeleteOrphan()
            .LazyLoad()
            .Inverse()
            .Cache.ReadWrite().IncludeAll();
Id(c=>c.SystemId);
版本(c=>c.Version);
引用(c=>c.x).Cascade.All();
引用(c=>c.y).Cascade.All();
HasMany(leaver.Property(“\B”))
.AsBag()
.Cascade.alldelete孤儿()
.Not.LazyLoad()
.Inverse()
.Cache.ReadWrite().includeal();
HasMany(leaver.Property(“\u C”))
.AsBag()
.Cascade.alldelete孤儿()
.LazyLoad()
.Inverse()
.Cache.ReadWrite().includeal();

我不想对映射文件进行更改,而是希望加载整个实体。i、 e.我应该得到一个a的列表,其中将有一个B和C的列表,它们的参考属性也将被急切地加载

您试图在这里进行笛卡尔积。我认为NHibernate需要将关系映射为集合,而不是包,因为包允许重复

不管怎么说,笛卡尔产品效率很低。改用多重查询或未来查询

见:


您试图在这里做笛卡尔积。我认为NHibernate需要将关系映射为集合,而不是包,因为包允许重复

不管怎么说,笛卡尔产品效率很低。改用多重查询或未来查询

见:


谢谢。你刚刚确认了我采取的方法。谢谢。你刚刚证实了我采取的方法。