2014-09-19 70 views
1

我想實現一種AddOrUpdate方法功能。因此,我寫的每一個實體添加或更新下面的代碼:兩次連接相同的實體

var someEntity = 
        context.Set<SomeEntity>.FirstOrDefault(
         x => x.EntityId == 2) ?? new SomeEntity(); 

     context.Set<SomeEntity>().Attach(someEntity); 
     someEntity.Foo="foo"; 
     someEntity.Bar="Bar"; 
//... 
context.SaveChanges(); 

雖然使用的代碼,當滿足conditiob實體存在,它被複制。你能建議我錯過了什麼嗎?根據我的理解,如果我們附加到已連接的實體,它的狀態不會改變。

回答

1

,則應指定EntityState:

var someEntity = 
       context.Set<SomeEntity>.FirstOrDefault(
        x => x.EntityId == 2) ?? new ProcedureBillingOptionRecord(); 

context.Entry(someEntity).State = someEntity.EntityId == 0 ? 
            EntityState.Added : 
            EntityState.Modified; 
someEntity.Foo="foo"; 
someEntity.Bar="Bar"; 
//... 
context.SaveChanges(); 

來源:Add/Attach and Entity States, Insert or update pattern

相關問題