RavenDb:带有Include的LoadAsync返回null

时间:2016-11-24 11:21:17

标签: ravendb

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

我无法理解为什么它不起作用。

在我搜索答案期间,我发现MultiLoaderWithIncludeAsyncMultiLoaderWithInclude的实施之间存在细微差别。我不知道这些课程是否可以解决我的问题。

2 个答案:

答案 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