當新的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 –