首页 > 解决方案 > 实体框架 - 以增量插入多个

问题描述

我想用增量号(MAX + 1)将多个对象保存到数据库中。当我只保存一个对象时,它可以正常工作,但是当我保存多个对象时,所有对象都具有相同的编号。这是我的代码:

for(int i = 0; i< 10; i++){
  _context.Add(new Data(){Number = _context.Max(d => d.Number) + 1});
  _context.SaveChanges();
}

如何将具有不同编号的多个对象保存到数据库中?谢谢

标签: entity-framework

解决方案


通常,如果人们在没有适当规范的情况下提出实体框架问题,他们的意思是使用像对象这样_context的标识符。DbContext但是, aSystem.Data.Entity.DbContext没有Add功能。所以我不确定你的_context对象代表什么。也许下次你会给出适当的规格。

幸运的是,您向我们展示了我们需要的三个功能:

  • 如何获得 Number 的最大使用值
  • 如何添加新Data对象
  • 如何保存更改。

以下代码将完成这项工作。它只会查询一次最大数量,并且只会保存一次更改。因此,它比您的解决方案更有效。

// get the current maximum number:
var maxNumber = myDbContext.MyItems.Select(myItem => myItem.Number).Max();

// create objects with a proper value for Number:
var objectsToAdd = Enumerable.Range(1, 10)     // from numbers 1..10
    .Select(i => new Data()                    // make a new Data object
    {
         Number = maxNumber + i,               // with value of Number = maxNumber + i
     })
     .ToList();

     // add the created objects and save the changes
     foreach (Data objectToAdd in objectsToAdd)
     {
         _context.Add(objectToAdd
     }
     // Perhaps there is a _context.AddRange(...)?
     _context.SaveChanges();

请注意,此方法仅在同时没有其他人添加 Number 大于 的 Data 时才能正常工作maxNumber。但是您的方法也有这个缺点:在查询您maxNumberSaveChanges其他人之间可能已经添加了Data


推荐阅读