C# 两次附加同一实体
我想实现一种AddOrUpdate方法功能。因此,我为每个实体添加或更新编写以下代码:C# 两次附加同一实体,c#,entity-framework,C#,Entity Framework,我想实现一种AddOrUpdate方法功能。因此,我为每个实体添加或更新编写以下代码: var someEntity = context.Set<SomeEntity>.FirstOrDefault( x => x.EntityId == 2) ?? new SomeEntity(); context.Set<SomeEntity>().Attach(someE
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();
var-someEntity=
context.Set.FirstOrDefault(
x=>x.EntityId==2)??新实体();
context.Set().Attach(someEntity);
someEntity.Foo=“Foo”;
someEntity.Bar=“Bar”;
//...
SaveChanges();
在使用该代码时,当满足条件B的实体存在时,它将被复制。你能告诉我我错过了什么吗。根据我的理解,如果我们附加到已经附加的实体,它所表示的状态不会改变。您应该指定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();
var-someEntity=
context.Set.FirstOrDefault(
x=>x.EntityId==2)??新程序BillingOptionRecord();
context.Entry(someEntity).State=someEntity.EntityId==0?
EntityState。添加了:
修改的实体状态;
someEntity.Foo=“Foo”;
someEntity.Bar=“Bar”;
//...
SaveChanges();
资料来源: