在mongodb和Entityframework

时间:2015-07-31 12:57:10

标签: c# entity-framework mongodb ef-fluent-api

我的域类如下:

public class Author
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Post> Posts { get; set; }
}

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Post> Posts { get; set; }
}

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public Author Author { get; set; }
    public Blog Blog { get; set; }        
}

如您所见,我绝对没有实体框架注释的任何数据注释或属性,并且我使用实体框架fluent api为每个类配置实体框架相关注释。 现在我想用MangoDb替换实体框架。

但是在mongo db中我需要在列表中放置一个属性,如下所示:

public class Author
{
    [BsonElement("_id")]
    [BsonRepresentation(BsonType.ObjectId)]
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Post> Posts { get; set; }
}

我的问题是,在其他课程之外是否有任何方式进行此配置,并且不要像我们在实体框架中流畅的api那样使用我的poco课程。

2 个答案:

答案 0 :(得分:0)

基本上,您可以同时使用EntityFramework和MongoDB驱动程序属性。但我不建议您使用与EntityFramework中使用的完全相同的数据结构,因为SQL和NoSQL是完全不同的方法。使用NoSQL,您应该更多地考虑应用程序如何使用数据并创建域,选择最佳嵌入策略并相应地应用索引。

您可以在MongoDB网站上找到一些好的阅读材料。以下是一些开始的链接:

http://docs.mongodb.org/manual/core/data-model-design/

http://docs.mongodb.org/manual/core/data-modeling-introduction/

答案 1 :(得分:0)

您可以使用BsonClassMap类来完成此操作,如:

BsonClassMap.RegisterClassMap<Post>(cm => 
{ 
    cm.MapMember(x => x.Title).SetElementName("_title");
});

文档在这里:Mapping Classes
还有默认约定,对于 Id 字段,您不需要将其映射到 _id 名称,它将自动处理。