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

问题描述 投票:0回答:3

这是我的代码块

 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”的定义,并且找不到接受“DbSet”类型的第一个参数的可访问扩展方法“Update”(您是否缺少 using 指令或程序集引用?)

c# asp.net-mvc entity-framework
3个回答
3
投票

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

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

例如。

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();
}

注意:以上代码仅供演示。立即更新所有实体并应用保存更改(从循环外部)始终是一个好习惯。


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();
}

0
投票

如果您已经有权访问实体对象,则可以将该对象附加到上下文并更改其要修改的状态。然后当您调用 SaveChanges 时,实体将被更新。

context.NameOfAnimalsAndBirds.Attach(entity);
    
var entityEntry = context.Entry<NameOfAnimalsAndBird>(entity);
entityEntry.State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
© www.soinside.com 2019 - 2024. All rights reserved.