我如何懒惰/渴望动态加载nhibernate

Dan*_*Dan 2 nhibernate

有没有办法在加载时动态设置两个实体之间的加载策略?

例如,如果我有一个具有Parent实体列表的Child实体,我可能希望在某些情况下加载具有延迟加载子项的"父"实体,并在其他情况下加载急切加载.

有没有办法做到这一点?映射似乎意味着它的一个或另一个.

Jos*_*eph 8

是的,建议的策略是默认您的实体使用延迟加载,然后当您想要加载它们时,您需要更改查询并指定您希望您的子项被急切加载.

至于如何实际实现预先加载,它取决于您正在使用的查询样式.(即Linq2NH,Criteria,HQL)

例如,使用Linq2NH我相信它是这样的:

session.Query<Parent>().Fetch(p => p.Child)...
Run Code Online (Sandbox Code Playgroud)

使用HQL你会使用

像这样:

from Parent as p left join fetch p.Child...
Run Code Online (Sandbox Code Playgroud)

最后,使用Criteria API,您可以执行以下操作:

var criteria = context.Session.CreateCriteria<Parent>();
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager);
....
Run Code Online (Sandbox Code Playgroud)