当新的Post
输入到系统中时,需要实例化若干Tags
并将其与Post
实例关联。这些Tags
中的一些已经存在于数据库中,而其他的则不需要插入。如何在连接之前检查实体是否存在?
一个例子:
var post = new Post {
Slug = "hello-world",
Title = "Hello, World!",
Content = "this is my first post.",
Tags = new List<Tag>()
};
var tag = new Tag { Name = "introduction" };
post.Tags.Add(tag);
当关联Tag
没有在数据库中存在,我可以依靠简单的调用DbSet<T>.Add
同时插入后和相关标签到数据库。 但是,尝试插入带有已存在于数据库中的关联标签的帖子会导致标签表上的主键违例。
在试图解决这个问题,我试图Attach
每个标签,当标签在数据库中已经存在,但否则,抛出一个异常有以下内部异常,其工作原理超级数据库上下文:
INSERT语句与FOREIGN KEY约束“FK_dbo.TagPosts_dbo.Tags_Tag_Name”冲突。冲突发生在 数据库“EF.Domain.BlogDb”,表“dbo.Tags”,列 '名称'。该语句已终止。“}
我要插入与后到数据库仅在需要时,相关的标签。我怎样才能做到这一点?
完整的代码它帮助:https://gist.github.com/anonymous/f98d1a4d6d760b87c58e –