EF:'附加类型'ENTITY NAME'的实体失败,因为同一类型的另一个实体已经具有相同的主键值

时间:2018-04-22 06:17:33

标签: c# .net entity-framework

代码:

 public void test2()
    {
        var ids = new int[] { 39, 40, 41 };
        var founds = _db.DB_MODEL.AsNoTracking().Where(x => ids.Contains(x.ID)).ToArray();
        founds.Repeat(x =>
        {
            x.IsDefault = false;
            _db.Set<QuoteEntity>().Add(x);
            _db.Entry(x).State = System.Data.Entity.EntityState.Modified;
        });


        var target = _db.DB_MODEL.AsNoTracking().FirstOrDefault(x => x.ID == 41);
        target.IsDefault = true;
        _db.Set<QuoteEntity>().Add(target);
        _db.Entry(target).State = System.Data.Entity.EntityState.Modified;


        _db.SaveChanges();
    }

然后我得到了以下错误:

  

System.InvalidOperationException:'附加类型为'ENTITY NAME'的实体失败,因为同一类型的另一个实体已具有相同的主键值。

     

如果图中的任何实体具有冲突的键值,则使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。

     

这可能是因为某些实体是新的并且尚未收到数据库生成的键值。

     

在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图表,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

如果我删除AsNoTracking(),那么它可以正常工作。

但我真的需要AsNoTracking来避免无意中改变实体。

0 个答案:

没有答案