实体一对多Db

时间:2012-04-24 00:23:40

标签: asp.net-mvc entity-framework one-to-many

我有一个关于首先实现一个到多个db的实体代码的基本问题。我有两个模型,文章和评论像这样:

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

    public virtual ICollection<Comment> Comments { get; set; }
....

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

    public virtual Article CommentForArticle { get; set; }

    public DateTime TimeStamp { get; set; 
....

如果我尝试将评论添加到Db(包含文章的Comment.CommentForArticle),评论将添加到数据库,但文章不包含评论集合中的评论。

但是如果我创建一个评论,并将其添加到文章中一切正常。我没有必要将注释添加到数据库中,它会自动添加(我猜。)

我在尝试实现此问题后出现问题(错误如:违反多重约束)所以我的问题是,我现在正在做这个,为什么你必须这样做,不要将评论添加到Db但是包含评论的文章。您是否可以分享任何可以帮助我更好地理解实体框架如何与一对多以及多对多关系一起工作的链接。

谢谢, 盖瑞特

1 个答案:

答案 0 :(得分:1)

如果存在“has”关系,我宁愿将新项添加到所有者的集合中。在您的情况下,Article Comment s,因此我会在article.Comments中添加新的评论。

除了继承之外,“is”关系也是可能的。假设您有ArticleType个实体和一个属性article.ArticleType。在这种情况下,我宁愿设置属性。我甚至不希望ArticleType拥有Articles导航属性。

在“纯”多对多的情况下(即,当连接表未被映射为其自身的实体类型时)除了向所有者的集合添加项目之外别无选择。

目前尚不清楚为什么在问题之后出现问题。是因为你混合了两种方法吗? (向数据库添加注释并在文章中添加相同的注释)。

至于参考:一系列伟大的文章开始here。它侧重于更复杂的场景,但对常规案例的引用并不难找到。