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);
当我遇到问题时,我正在我的项目中添加一些异步调用。 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);