2012-05-16 52 views
0

我正在創建一個WebAPI,前端將發回實體列表。其中一些可能已經存在。使輸入實體與現有實體匹配?

public void AddTags(List<Tag> tags) //input coming from frontend js 
    { 
     foreach(Tag tag in tags){ 
      //check if tag exists in db 
      //if not, create one 

     } 
    } 

我試圖用DbContext.Tags.Contains(tag)但我不知道如何與數據庫中的現有標籤實體鏈接tag

我試圖做同樣的事情下面:

Tag tag = new Tag(); 
tag.name = "foo"; 
tag.someProp1= "hello"; 
tag.someProp2= "world"; 
tag.someProp3= "123"; 
//tag.id = unique id is unknown, decided by db 
//find an identical entity exists in db, link `tag` to it 
//if no such entity exists, add to DbContext.Tags 

我在尋找類似DbContext.Tags.Match(tag);凡給出一個實體,它在尋找一個相同的數據庫。

+0

「標籤」是否包含唯一標識符? –

+0

是的,但我相信當它在js端創建時,uid爲空。它與'Tag tag = new Tag()'類似,您可以在其中填寫tag_name,但在執行SaveChanges()之前,不會設置tag_id。 – Bonk

回答

1

這可能適合你。我認爲Tag有一些類型的唯一標識符(可能是Id或Name屬性)。所以,你總是可以做這樣的事情:

DBContext.Tags.Where(t => t.Id == tag.Id);

請問

爲你工作?

UPDATE

基於以上的評論,我不知道你是什麼之後。如果你只是'添加',那麼你不需要檢查標籤是否存在,是正確的?

如果你知道你想匹配什麼,你可以這樣做嗎?

DBContext.Tags.Where(t => t.name == tag.name && t.prop1 == tag.prop1).FirstOrDefault();

+0

對不起,我不清楚,我更新了我的帖子。 – Bonk

+0

@Yonk好吧,我仍然不完全清楚。什麼決定一個標籤是否與另一個標籤相同? –

+0

@Yonk你知道所有的房產要提前匹配嗎? –

0

你可以看看標識符在數據庫中標記起來,做到這一點算賬:

如果實體已經存在:

context.Tags.Attach(tag); 
entry.State = EntityState.Modified; 
context.SaveChanges(); 

否則只是:

context.Tags.Add(tag); 
context.SaveChanges(); 

我我不確定你是否可以忽略第一次檢查,但至少這會起作用。