我有以下代码可作为Fluent NHibernate查询的一部分

session.Query<Project>()
       .Where(r=>r.IsActive)
       .FetchMany(r => r.ProjectDependencies)
       .ThenFetch(r => r.DependencyProject)
       .ThenFetch(r => r.Owner)


上面的代码可以正常工作,但是问题是我现在想加入并加载一些其他的“属性”,这些属性是除Owner(如上所述)之外的DependencyProject对象的联接。所以我想做这样的事情:

session.Query<Project>()
       .Where(r=>r.IsActive)
       .FetchMany(r => r.ProjectDependencies)
       .ThenFetch(r => r.DependencyProject)
       .ThenFetch(r => r.Owner)
       .AndAlsoFetch(r=>r.Status)


或者像这样:

session.Query<Project>()
       .Where(r=>r.IsActive)
       .FetchMany(r => r.ProjectDependencies)
       .ThenFetch(r => r.DependencyProject)
       .ThenFetch(r => r.Owner && r.Status)


无论如何,要从已经作为ThenFetch一部分引入的对象上进行多个属性提取吗?

最佳答案

我目前无法测试,因此这可能会偏离基础,但这可能是一种可能的方法:

  var query = session.Query<Project>()
            .Where(r=>r.IsActive)
            .FetchMany(r => r.ProjectDependencies)
            .ThenFetch(r => r.DependencyProject);

  query.ThenFetch(r => r.Owner).ToFuture();
  query.ThenFetch(r => r.Status).ToFuture();

  Project project = query.ToFuture().ToList();

10-06 00:34