Entity Framework - вставить несколько с шагом - PullRequest
0 голосов
/ 30 октября 2018

Я хотел бы сохранить несколько объектов в базе данных с номером приращения (MAX + 1). Когда я сохраняю только один объект, он работает правильно, но когда я сохранял несколько, все объекты имели одинаковый номер. Вот мой код:

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

Как сохранить несколько объектов в базе данных с разным номером? Спасибо

1 Ответ

0 голосов
/ 30 октября 2018

Обычно, если люди задают вопросы о структуре объекта без надлежащих спецификаций, они имеют в виду такие идентификаторы, как _context a DbContext объект. Однако System.Data.Entity.DbContext не имеет функции Add. Так что я не уверен насчет того, что представляет ваш _context объект. Может быть, в следующий раз вы дадите правильные характеристики.

К счастью, вы показали нам три функции, которые нам нужны:

  • Как получить максимально используемое значение для числа
  • Как добавить новый 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. Но у вашего метода есть и этот недостаток: между запросом ваших maxNumber и SaveChanges кто-то еще мог бы добавить Data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...