使用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抛出一个错误,表示密钥已在使用中。希望有人可以帮忙!
答案 0 :(得分:2)
您需要首先检索类别实体并重新使用或。将它们附加到上下文并重复使用。否则,EF将尝试在数据库中为新创建的实体创建新行,由于密钥冲突,这将失败。