RavenDb:LoadAsync with Include returns null

RavenDb : LoadAsync with Include returns null

当我遇到问题时,我正在我的项目中添加一些异步调用。 Session 和 AsyncSession 之间的相同调用不 return 我的文档。

这里是文档:

class Company {
    string Id;
    string Name;
    BusinessUnit BusinessUnit;
}

class BusinessUnit {
    string Name;
    List<BusinessUnit> BusinessUnits;
    List<Employee> Employees;
}

class Employee {
    string Position;
    string UserId;
}

class User {
    string Id;
    string FullName;
}

User 和 Company 是我的 RavenDb 中的两个集合。如您所见,我们的文档 Company 中有一个业务部门树。所以当我想加载一家公司时,我会打这个电话:

var company = Session.Include<Employee, User>(x => x.UserId)
    .Load<Company>(companyId); //Working like a charm

但是当我尝试对 Async 做同样的事情时:

var company = await AsyncSession.Include<Employee, User>(x => x.UserId)
    .LoadAsync<Company>(companyId); //company is null

var company = await AsyncSession.LoadAsync<Company>(companyId); //This is working

我不明白为什么它不起作用。

在搜索答案的过程中,我发现 MultiLoaderWithInclude and AsyncMultiLoaderWithInclude 的实现之间存在细微差别。不知道这些能不能解决我的问题类.

感谢您的失败测试。根本原因是您在那里使用的是字段,而不是属性。 这是客户端中的一个错误,很快就会修复,但与此同时您可以使用属性并完全避免它。

这不会在单个请求中加载相关的用户文档。 你可以这样做:

var company = session.Include<Company, User>(x => x.BusinessUnit.Employees.Select(y => y.UserId)).Load<Company>(companyId);