2014-09-19 69 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

相关问题