两次附加同一实体

本文关键字:实体 两次 | 更新日期: 2023-09-27 18:23:40

我想实现一种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(); 

在使用该代码时,当满足条件的实体存在时,它是重复的。你能告诉我我缺了什么吗。在我的理解中,如果我们附加到已经附加的实体,它表示不会改变。

两次附加同一实体

您应该指定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(); 

来源:添加/附加和实体状态,插入或更新模式