2012-10-20 35 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的常态。 –

相关问题