Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两次附加同一实体_C#_Entity Framework - Fatal编程技术网

C# 两次附加同一实体

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

我想实现一种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(); 
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();
资料来源: