我有一个实体 A,它有许多实体 B 和实体 C。所有实体 A、B 和 C 都有一些引用 x、y 和 z,应该立即加载。
我想从数据库中读取所有实体 A,并使用标准 API 急切地加载 B 和 C 的集合。到目前为止,我能够急切地获取“A”中的引用。但是当集合被加载时,它们中的引用被延迟加载。
这是我的做法
AllEntities_A =
_session.CreateCriteria(typeof(A))
.SetFetchMode("x", FetchMode.Eager)
.SetFetchMode("y", FetchMode.Eager)
.List<A>().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();
我不想更改映射文件,并且想急切地加载整个实体 A。即我应该得到一个 A 的列表,其中会有 B 和 C 的列表,它们的参考属性也将被急切地加载