2011-11-11 38 views
1

我有一個場景,其中一些項目正在使用多個標籤進行標記,其中一些已經在數據庫中,而另一些則不在數據庫中。僅插入那些尚未在數據庫中的對象

我想象我需要Attach()已存在的標籤和AddObject()不是的標籤。這一定是一種常見的情況,對此的「最佳實踐」方法是什麼?

+0

當你說'標籤已經存在於數據庫中'時,你的意思是(a)該特定實例是否存在,或者(b)標籤是否存在相同的值? –

+0

以及來自http的字符串,我希望匹配與該字符串具有相同值的現有標記,並且不會創建重複項。所以b)我想。 – Tom

回答

2

唯一真正的方式來處理,這是

  • 查找該項目已經存在
  • 分裂您的收藏分爲兩組:
    • 新項目
    • 現有項目
  • 如果需要,添加新項目並附加現有項目。

所以分割你的標籤這樣

var tags = context.Tags.Where(t => t.ItemId = itemId) // search via your item 
    .Select(t => t.TagValue); 

var newTags = myItem.Tags.Where(t => !tags.Contains(t.TagValue)); 
var existingTags = myItem.Tags.Where(t => tags.Contains(t.TagValue)); 

再加入&附加爲合適。