【问题标题】:Lazy Initialization in NHibernateNHibernate 中的延迟初始化
【发布时间】:2013-02-17 10:26:03
【问题描述】:

如果一个实体与另一个实体的关系映射为 Lazy=False,但对于某个功能,我需要将它们全部 Lazily 获取,这可以在运行时执行吗?

【问题讨论】:

  • 做相反的事情要容易得多......
  • 你确定“懒惰”是你想要的吗?就个人而言,我从未需要禁用它。在实践中,您更有可能使用fetch="join" 自动检索特定关联。 that 可以在条件查询和 QueryOver 中使用SetFetchMode(..., FetchMode.Lazy)(条件)或Fetch(...).Lazy(QueryOver)来控制。顺便说一句,默认为懒惰行为时 +1。您可以在所有 API 中启用 join-fetching,但 AFAIK 无法在 LINQ 中显式禁用它。

标签: .net linq nhibernate lazy-initialization


【解决方案1】:

不,你不能。正如评论者指出的那样,您可以将其映射为惰性并急切地获取,但不能反过来。

即在 LINQ 中,您可以急切地使用 Fetch/FetchMany/ThenFetch/ThenFetchMany 获取关系:

session.Query<Parent>()
    .Where(x => x.Name == "Ruba")
    .FetchMany(x => x.Children)
    .ThenFetch(x => x.SomethingMore);

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 2020-05-10
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多