两次附加相同的实体

时间:2014-09-19 15:15:41

标签: c# entity-framework

我想实现一种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 个答案:

答案 0 :(得分: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