Entity framework 实体框架核心的UpdateRange方法不起作用

Entity framework 实体框架核心的UpdateRange方法不起作用,entity-framework,asp.net-core,entity-framework-core,Entity Framework,Asp.net Core,Entity Framework Core,这里使用实体框架核心的UpdateRange方法来更新多个记录,但它不起作用 我的代码是: var dept1 = new Department() { Id = 8, Name = "New Designing" }; var dept2 = new Department() { Id = 9, Name = "New Research" }; var dept3 = new Department() { Id

这里使用实体框架核心的
UpdateRange
方法来更新多个记录,但它不起作用

我的代码是:

var dept1 = new Department()
{
    Id = 8,
    Name = "New Designing"
};

var dept2 = new Department()
{
    Id = 9,
    Name = "New Research"
};

var dept3 = new Department()
{
    Id = 102,
    Name = "New HR"
};

List<Department> modifiedDept = new List<Department>() { dept1, dept2, dept3 };

using (var context = new CompanyContext())
{
    context.UpdateRange(modifiedDept);
    await context.SaveChangesAsync();
}
var dept1=新部门()
{
Id=8,
Name=“新设计”
};
var dept2=新部门()
{
Id=9,
Name=“新研究”
};
var dept3=新部门()
{
Id=102,
Name=“新人力资源”
};
List modifiedept=new List(){dept1,dept2,dept3};
使用(var context=new CompanyContext())
{
context.UpdateRange(modifiedDept);
wait context.saveChangesSync();
}
我得到的错误是:

Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException:'数据库操作预期影响1行,但实际影响0行。自加载实体后,数据可能已被修改或删除。有关了解和处理乐观并发异常的信息,请参阅


在这种情况下应该怎么做?

您应该从数据库中获取数据并修改数据。不创建新类

using (var context = new JobContext())
{
    var depts = context.Department.Where(x => x.Id > 1).AsQueryable();
    depts.Where(x => x.Id == 2).FirstOrDefault().Name = "New Designing";
    depts.Where(x => x.Id == 3).FirstOrDefault().Name = "New Research";
    depts.Where(x => x.Id == 4).FirstOrDefault().Name = "New HR";

    context.UpdateRange(depts);
    context.SaveChanges();
}
以前

之后


您应该从数据库中获取数据并修改数据。不创建新类

using (var context = new JobContext())
{
    var depts = context.Department.Where(x => x.Id > 1).AsQueryable();
    depts.Where(x => x.Id == 2).FirstOrDefault().Name = "New Designing";
    depts.Where(x => x.Id == 3).FirstOrDefault().Name = "New Research";
    depts.Where(x => x.Id == 4).FirstOrDefault().Name = "New HR";

    context.UpdateRange(depts);
    context.SaveChanges();
}
以前

之后


我怀疑这段代码在任何版本的EF Core中都能在同一个数据库中运行。异常只是表明目标表中缺少一些提供的
Id
。或者您同时更改了模型,现在它有一个并发令牌。@IvanStoev我在代码中发现了问题。数据库中没有id“102”,因此事务被回滚。我认为最好是从数据库中获取id,这样就不会发生键入错误。我怀疑这段代码在任何版本的EF Core中都不能使用相同的数据库。异常只是表明目标表中缺少一些提供的
Id
。或者您同时更改了模型,现在它有一个并发令牌。@IvanStoev我在代码中发现了问题。数据库中没有id“102”,因此事务被回滚。我认为最好从数据库中获取id,这样就不会发生键入错误。