多对多插入逻辑

时间:2013-08-29 22:33:24

标签: asp.net-mvc entity-framework

使用Entity Framework我试图在一个简单的博客asp.net mvc 4应用程序中建立多对多的关系。我的模型如下:

public class BlogPost
    {
        [Key]
        public string Id { get; set; }
        public DateTime DateCreated { get; set; }

        [Required]
        public string Title { get; set; }
        public string Image { get; set; }
        public string ThumbImage { get; set; } 
        public ICollection<BlogCategory> Categories { get; set; }

        [AllowHtml]
        public string Content { get; set; }        
    }

    public class BlogCategory
    {
        [Key]
        public string Name { get; set; }

        public virtual ICollection<BlogPost> Posts { get; set; }
    }

博客类别不能是枚举,因为可能需要添加新的博客类别,因此需要一个集合。类别很简单,只是名称,以及导航到具有给定类别的所有帖子的方法。问题是在创建新的BlogPost时。在理想的世界中,会发生以下情况。

private BlogPost post = new BlogPost
    {
        Title = "Blog Entry One",
        Categories = new List<BlogCategory>()
            {
                new BlogCategory {Name = "Web"},
                new BlogCategory() {Name = "C#"}
            },
        Content =
            "Aliquam sem quam, posuere eget tellus in, porta semper dolor. Morbi aliquam placerat urna ut."
    };

如果保存上下文,如果名为“Web”的BlogCategory已经在数据库中,则引用它。如果没有创建新条目。

目前,EF抛出一个错误,表示密钥已在使用中。希望有人可以帮忙!

1 个答案:

答案 0 :(得分:2)

您需要首先检索类别实体并重新使用或。将它们附加到上下文并重复使用。否则,EF将尝试在数据库中为新创建的实体创建新行,由于密钥冲突,这将失败。