Изменение значения столбца int каждой записи на 1 приводит к дублированию ошибки - PullRequest
0 голосов
/ 20 февраля 2020

У моего объекта есть столбец Order, значение которого должно быть уникальным. Я хочу создать функцию, которая увеличивает каждую запись Order на 1:

MyEntities db = new MyEntities();

var entities = db.Entity.Where(e => e.Order > 10);
foreach (var entity in entities)
{
    entity.Order++;
}
db.SaveChanges();

Проблема заключается в сохранении изменений. Я получаю сообщение об ошибке, что в столбце Order есть дубликат. Я подозреваю, что он сохраняет изменения строка за строкой, и когда он сохраняет первое изменение Order, следующее еще не было обработано и имеет то же значение. Я прав? Как я могу преодолеть эту проблему?

1 Ответ

1 голос
/ 20 февраля 2020

Если для вас не подходят предложения в комментариях, вы можете написать код на SQL, например, так:

        string Cmd = "UPDATE Entity SET [Order] = [Order] + 1 WHERE [Order] > 10 ";
        db.Database.ExecuteSqlCommand(Cmd);

Или, если вы хотите использовать EF, чтобы выбрать набор данных и построить SQL Команда с этого, попробуйте что-то вроде:

            var entities = db.Entity.Where(e => e.Order > 10);
            string Cmd = string.Format("UPDATE Entity SET [Order] = [Order] + 1 WHERE [Order] in ({0})",string.Join(",", entities.Select(e => e.Order.ToString()).ToList()));
            db.Database.ExecuteSqlCommand(Cmd);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...