当我遇到问题时,我在项目中添加了一些异步调用。 Session和AsyncSession之间的相同调用不会返回我的文档。
这里是文件:
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
我无法理解为什么它不起作用。
在我搜索答案期间,我发现MultiLoaderWithInclude和AsyncMultiLoaderWithInclude的实施之间存在细微差别。我不知道这些课程是否可以解决我的问题。
答案 0 :(得分:1)
感谢失败的测试。根本原因是你在那里使用字段,而不是属性。 这是客户端中的一个错误,很快就会修复,但在此期间您可以使用属性并完全避免它。
答案 1 :(得分:0)
这不会在单个请求中加载相关的用户文档。 你可以这样做:
class UsersController < ApplicationController
after_action :set_default_avatar!, only: [:create]
def create
**************
**************
end
def set_default_avatar!
url = ImageUploader.default_url()
@user.update_attribute(:avatar, url)
end
end
class ImageUploader < CarrierWave::Uploader::Base
def self.default_url()
ActionController::Base.helpers.asset_path("fallback/" + "avatar_#{rand(1..15).to_s}.jpg"])
end
end