DbSet <xxx>'不包含'Update'的定义,也没有可访问的扩展方法'Update'

时间:2019-05-28 04:47:00

标签: c# asp.net-mvc entity-framework

这是我的代码块

 foreach(var n in animalbirdAdoptionDetails)
 {
    int animalBirdsId = n.AnimalsAndBirdsId;
    int NoAnimal =  Convert.ToInt32(n.NoAnimalsAdopted);
    n.isActive = false;
    context.NameOfAnimalsAndBirds.Update(e2 => new entity 
                     { 
                         quantity = e2.quantity + moreQuantity
                     });
    context.SaveChanges();

  }

DbSet'不包含'Update'的定义,并且找不到可访问的扩展方法'Update'接受类型为'DbSet'的第一个参数(您是否缺少using指令或程序集引用?)

2 个答案:

答案 0 :(得分:1)

您遇到此错误,因为在实体框架中没有可用的更新扩展方法。

如果要更新现有记录,则需要通过主键引用或任何其他表字段引用来检索现有记录。 并将新值分配给表格字段。

例如。

foreach(var n in animalbirdAdoptionDetails)
{
    // remove unwanted variables and casting expression.
    // if not required then.
    int animalBirdsId = n.AnimalsAndBirdsId;
    int NoAnimal =  Convert.ToInt32(n.NoAnimalsAdopted);
    n.isActive = false;

    // Retrieve existing record
    var entity = context.NameOfAnimalsAndBirds.FirstOrDefault(x => x.Id == n.Id);

    // assign new value to existing property.
    entity.quantity = entity.quantity + moreQuantity;

    // in last just apply save changes.
    context.SaveChanges();
}

注意:上面的代码仅用于演示。最好一次更新所有实体并应用保存更改(从循环外部)。

答案 1 :(得分:0)

foreach(var n in animalbirdAdoptionDetails)
{
   int animalBirdsId = n.AnimalsAndBirdsId;
   int NoAnimal =  Convert.ToInt32( n.NoAnimalsAdopted);
   n.isActive = false;

   // Retrieve existing record into your model class
   NameOfAnimalsAndBird model = context.NameOfAnimalsAndBirds.Find(n.Id);

    model.quantity = model.quantity + moreQuantity;  
    context.SaveChanges();
}