有没有办法在加载时动态设置两个实体之间的加载策略?
例如,如果我有一个 Parent
实体,它有一个 Child
实体列表,在某些情况下我可能想加载带有延迟加载子项的“Parent”实体并渴望加载其他人。
有没有办法做到这一点?映射似乎暗示了其中之一。
最佳答案
是的,建议的策略是默认您的实体使用延迟加载,然后当您想要预先加载它们时,您更改您的查询并指定您希望您的 child 预先加载。
至于如何实际实现预先加载,这取决于您使用的查询样式。 (即 Linq2NH、标准、HQL)
例如,对于 Linq2NH,我相信它是这样的:
session.Query<Parent>().Fetch(p => p.Child)...
使用 HQL
fetch
像这样:
from Parent as p left join fetch p.Child...
最后,使用 Criteria API,您可以执行如下操作:
var criteria = context.Session.CreateCriteria<Parent>();
criteria.SetFetchMode("Child", NHibernate.FetchMode.Eager);
....
关于nhibernate - 我如何使用 nhibernate 动态地延迟/急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984833/