实体框架-增量插入多个

时间:2018-10-30 11:26:24

标签: entity-framework

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

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

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

1 个答案:

答案 0 :(得分:0)

通常,如果人们在没有适当规范的情况下询问实体框架问题,那么它们的意思是带有_contextDbContext对象之类的标识符。但是,System.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();

请注意,只有在此期间没有其他人添加数字大于maxNumber的数据时,此方法才能正确运行。但是您的方法还有一个缺点:在查询maxNumberSaveChanges之间,可能有人添加了Data