Как сдвинуть запись после удаления записи в Entity Framework? - PullRequest
0 голосов
/ 11 октября 2011

У меня вопрос: у меня есть таблица, в которой есть столбцы id,name,rownumber. rownumber равно int и имеет 1,2,3,4,.. числа.

Когда я хочу вставить в таблицу, я получаю max(rownumber) и вставляю max(rownumber)+1 для новой строки. Но я хочу, чтобы при удалении строки, например, при удалении строки с номером, равным 3, я хочу обновить rownumber и сместить rownumber.

Как я могу это сделать? Помогите мне, пожалуйста. спасибо.

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Если у вас есть 10 или, возможно, 100 записей, и производительность не имеет большого значения, вы можете использовать что-то вроде:

using (var ctx = new MyContext())
{
    var query = ctx.Entities
        .Where(e => e.RowNumber > entityToDelete.RowNumber)
        .OrderBy(e => e.RowNumber);

    foreach (var entity in query)
        entity.RowNumber -= 1;

    ctx.DeleteObject(entityToDelete);

    ctx.SaveChanges();
}

Если у вас тысячи записей, и производительность важна, приведенный выше код ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО BAAAAD идея.Лучшим решением будет хранимая процедура, чтобы избежать загрузки такого количества данных в память и отправки такого большого количества команд UPDATE (для каждой измененной записи) в БД.Гораздо лучше было бы ИЗБЕГАТЬ ЭТОГО ИЗМЕНЕНИЯ В ПЕРВОМ МЕСТЕ (если это не является абсолютно необходимым), потому что вам, очевидно, придется перейти на множество других записей, только потому, что вы удалили одну запись.* Редактировать Выделить важную часть ответа жирным шрифтом .

0 голосов
/ 11 октября 2011

Слаума покрыл большинство недостатков этого. Представьте, что если вы добавите отношения к этой таблице, для каждого отношения вам придется изменить ссылку на другие таблицы в соответствии с новыми номерами. Это может быть очень опасно. В чем проблема с тем, чтобы оставить все как есть?

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