2016-11-24 81 views
1

我將在我的項目的一些異步調用,當我遇到一個問題。 Session和AsyncSession之間的相同調用不返回我的文檔。RavenDb:LoadAsync與包括返回null

這裏的文件:

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兩個集合。正如您所看到的,我們的文檔Company中有一個業務單位樹。所以,當我想加載一個公司,我做這樣的判斷:

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

但是,當我試圖做同樣的異步:

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實施之間的微小差異。我不知道我的問題是否可以通過這些課程來解決。

+0

你可以提交一個失敗的測試郵件列表? 這_should_工作。從Load返回的任何內容都應該從Load/Include中返回。 瞭解如何在這裏提交一個失敗的測試: http://ravendb.net/docs/article-page/3.5/Csharp/server/troubleshooting/sending-support-ticket –

+0

我已經發布了一個失敗的測試! – Galhem

回答

1

感謝失敗的測試。潛在的原因是你在那裏使用字段,而不是屬性。這 是,稍後將固定客戶端的錯誤,但在此期間,你可以使用屬性,避免它完全。

0

這不會在一個請求加載相關用戶文檔。 你可以做這樣的事情:

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