我在遇到问题时在项目中添加了一些异步调用。会话和异步之间的相同电话不会返回我的文档。
这里的文档:
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;
}
用户和公司是我的Ravendb中的两个收藏品。如您所见,我们的文档公司有一个业务部门。因此,当我想加载公司时,我会打电话:
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
我看不出为什么它不起作用。
在我搜索答案时,我发现多载荷Withincude和Asyncmultiloaderwithinclude的实现之间存在很小的区别。我不知道这些课程是否可以解决我的问题。
感谢您的失败测试。根本的原因是您在其中使用字段,而不是属性。这是客户端中的一个错误,将很快修复,但与此同时,您可以使用属性并完全避免。
这不会在单个请求中加载相关的用户文档。您可以做这样的事情:
var company = session.Include<Company, User>(x => x.BusinessUnit.Employees.Select(y => y.UserId)).Load<Company>(companyId);