2012-10-20 40 views
1

附帶RavenDB具有Albums文檔集合,每個有Genre嵌入文件中,就像這樣的示例數據庫:RavenDB:當嵌入式與如何以不同的序列化類的文檔

{ 
    ... other stuff... 
    "Genre": { 
    "Id": "genres/1", 
    "Name": "Rock" 
    }, 
    ... other stuff... 
} 

公告在這裏GenreIdName字段。

但是當你看Genre文件,他們有IdNameDescription領域,如:

{ 
    "Description": "Rock and Roll is a form of rock music developed in the 1950s and 1960s. Rock music combines many kinds of music from the United States, such as country music, folk music, church music, work songs, blues and jazz.", 
    "Name": "Rock" 
} 

我怎樣才能在代碼模型,這樣,當我Store()然後SaveChanges()Genre會在保存自己的文檔時與保存Album文檔和嵌入Genre時序列化和保存不同(如示例數據)?

回答

3

這種模式將所述ravendb樣本數據相匹配:

public class Genre 
{ 
    public string Id { get; set; } 
    public string Description { get; set; } 
    public string Name { get; set; } 
} 

public class Album 
{ 
    public string Id { get; set; } 
    public string AlbumArtUrl { get; set; } 
    public GenreRef Genre { get; set; } 
    public decimal Price { get; set; } 
    public string Title { get; set; } 
    public int CountSold { get; set; } 
    public ArtistRef Artist { get; set; } 

    public class GenreRef 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
    } 

    public class ArtistRef 
    { 
     public string Id { get; set; } 
     public string Name { get; set; } 
    } 
} 

示例用法與包括:

var albumId = "albums/1"; 
var album = session.Include<Album>(x => x.Genre.Id) 
        .Load<Album>(albumId); 
var genre = session.Load<Genre>(album.Genre.Id); 

的包括指加載類型時,沒有分貝調用,因爲它已經被跟蹤在會議中。

+0

嗯,理解,可以工作。但這似乎有點跛腳。在模型中,我希望能夠將專輯的流派設置爲實際的流派類型(將流派實例用於存儲爲文檔並嵌入到專輯中)。任何方式來做到這一點? – TravisK

+0

沒有。它不這樣工作。風格和專輯是唯一的文件。它們是DDD術語的「聚合體」。參考類本身不是一個聚合或文檔。您可以將GenreRef和ArtistRef作爲單獨的類,但它們都是「相冊」文檔的一部分。爲了清楚起見,有些人把它們作爲嵌套類放在聚合中,所以它們不會在外部干擾。 –

+0

我更新了示例代碼,以顯示嵌套類和單獨的引用類,如我所述。此外,現在將Ids正確顯示爲字符串。 Int ID可以工作,但不是Raven的常態。 –

相關問題