有没有办法在加载时动态设置两个实体之间的加载策略?
例如,如果我有一个具有Parent实体列表的Child实体,我可能希望在某些情况下加载具有延迟加载子项的"父"实体,并在其他情况下加载急切加载.
有没有办法做到这一点?映射似乎意味着它的一个或另一个.
是的,建议的策略是默认您的实体使用延迟加载,然后当您想要加载它们时,您需要更改查询并指定您希望您的子项被急切加载.
至于如何实际实现预先加载,它取决于您正在使用的查询样式.(即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)
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |