2012-10-31 23 views
0

一個ASP.NET MVC(4)應用程序中使用RavenDB,什麼是上載一組相關實體並將它們傳遞給一個觀點正確的模式?什麼是「加盟」,在RavenDB兩個Entity設置正確的模式?

以堆棧溢出爲典型的例子,假設下面的實體:

class User 
{ 
    public int Id { get; set; } 

    public string UserName { get; set; } 
} 

class Comment 
{ 
    public int Id { get; set; } 

    public string Body { get; set; } 

    public string Author{ get; set; } 
} 

class Question 
{ 
    public int Id { get; set; } 
    // ... 
    public List<Comment> Comments { get; set; } 

    public Question() 
    { 
     Comments = new List<Comment>(); 
    } 
} 

我們想要做的是旁邊顯示的問題下評論的用戶的信息是什麼,這些評論被存儲爲部分問題的文件,所以我們IncludeComment.Author

我們的查詢可能是這樣的:

var question = RavenSession.Include<Question>(x => x.Author) 
          .Include<Comment>(x => x.Author) 
          .Load<Question>(id); 

現在我們有一切的評論的問題對象,烏鴉客戶端已緩存的所有我們需要的用戶配置文件,什麼是相關評論的對象配對的用戶對象的正確/最佳/最RavenDB批准的方式是什麼?

一個想法是,我可以轉換UserCommentCommentViewModel和發送到客戶端,但似乎相當手冊。

另一個選項可能是將另一個屬性添加到Comment作者,即[JsonIgnore]'d和在吸氣劑中,從Raven會話中延遲加載用戶。這感覺很髒,因爲評論模型對象需要持有對烏鴉會議的參考。

回答

1

你想這樣做,是這樣的:

var question = RavenSession.Include<Question>(x => x.Author) 
          .Include(x => x.Comments.Select(c=>c.Author)) 
          .Load(id); 

這適用於1.2,請注意。 然後,你可以呼叫負載(question.Author),以獲得從session緩存中的文檔。

+0

感謝Ayende,你會倡導的觀點做第二負載,或者你會做他們都在控制,在一個循環,並將其傳遞出的視圖列表或字典或使用CommentViewModel是有強烈鍵入作者屬性? –

相關問題