2010-11-25 38 views
3

我目前正在开发基于论坛(问题/答案)的应用程序。
使用C#ASP.net MVC和MongoDB进行数据存储。使用C#/ ASP.net建模NoSQL论坛应用程序MVC

我目前正在看模型。
我想有这样不同的类中:(简体)

public class Question 
{ 
    public string ID { get; set; } 

    public string Title { get; set; } 
    public string Body { get; set; } 
    public List<string> Tags { get; set; } 
    public DateTime DateCreated { get; set; } 

    public string ForumID { get; set; } 
} 

回答

public class Answer 
{ 
    public string ID { get; set; } 
    public string QuestionID { get; set; } 
    public string Body { get; set; } 
    public DateTime DateCreated { get; set; } 
} 

我的问题是:
如何处理“的答复”
我是最具有(如上述模型)两个单独的“实体”
或者我应该在我的问题模型中有一个答案列表?

有些要求是,我需要能够显示答案等的个性化......

有了这个被存储在NoSQL的分贝,我知道我应该非规范化的东西,却怎么也我插入一个答案,没有检索整个帖子? NoRM与MongoDB一起使用是否可行?

回答

6

通常在MongoDB中,你会在问题中嵌入答案。 99%的时间您将通过问题进行查询,因此您不妨同时获得答案。

有些要求是,我需要能够显示答案的个性化......

如果你带回答案与问题,这是很容易的。你将有一个数组/列表/集合的答案。所以你只需抓住长度。

,但我怎么可以插入一个答案,而无需检索整个后

MongoDB的支持原子“$推”操作。这意味着您可以将一个项目添加到数组中,而无需实际从客户端加载文档。从JavaScript的外壳,它应该是这样的:

db.questions.update({_id : your_id}, { $push : { answers : your_answer_object } });

所以MongoDB是这个能力。您必须检查NoRM驱动程序,以确保它们确实允许这种类型的行为(如果它们不支持$ push,那么它们确实会丢失一些东西)。

2

答案应该是问题的一部分。

public class Question { public string ID {get;组; }

public string Title { get; set; } 
    public string Body { get; set; } 
    public List<string> Tags { get; set; } 
    public DateTime DateCreated { get; set; } 

    public string ForumID { get; set; } 
    public List<Answers> Answers { get; set; } 
} 

由于缺少连接文档数据库,因此鼓励您将整个图形的实例存储在一个文档中。