Linq to SQL, обновить много данных перед одной вставкой - PullRequest
0 голосов
/ 29 мая 2011

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

UPD * НОВАЯ ВЕРСИЯ вопроса * Здравствуйте.Прежде чем вставить новое значение в таблицу, мне нужно изменить одно поле во всех строках этой таблицы с определенным идентификатором (это FK для другой таблицы).Какой лучший способ сделать это?в коде C #, триггер использования руды?если C # вы можете показать мне код?

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Вам, вероятно, следует подумать об изменении вашего дизайна, это не звучит так, как будто оно будет хорошо масштабироваться, я, вероятно, сделал бы это с триггером, если это всегда требуется, но если нет, используйте id ExecuteCommand.

var ctx = new MyDataContext();
ctx.ExecuteCommand("UPDATE myTable SET foo = 'bar'");
0 голосов
/ 29 мая 2011

Глядя на ваш комментарий к ответу Павла, я чувствую, что мне следует перезвонить сюда. У нас есть несколько таблиц, в которых мы должны хранить историю каждой записи в этой таблице. Мы реализуем это путем создания отдельной таблицы для каждого. Например, у нас может быть таблица Comment, а затем таблица CommentArchive с ссылкой внешнего ключа на CommentId в таблице Comment.

Триггер в таблице Comment гарантирует, что при каждом обновлении определенных полей в таблице Comment «старая» версия (доступная через таблицу deleted в триггере) передается в CommentArchive стол. Очевидно, это означает, что для каждого Comment может существовать несколько записей CommentArchive, но если вы ищете только «активные» комментарии, просто посмотрите в таблицу Comment. И если вам нужна информация об истории комментария, вы можете легко использовать LINQ to SQL, чтобы перейти от интересующего вас комментария к комментарию, который ссылается на него.

Поскольку триггеры, которые мы используем в приведенном выше примере, вставляют только одно значение в таблицу Archive для каждого обновления, они запускаются очень быстро, и мы получаем хорошую производительность. Недавно у нас были проблемы, когда я пытался сделать триггеры более сложными, и мы начали получать взаимные блокировки всего с 15 параллельными транзакциями. Итак, урок заключается в том, что вы должны упростить эти триггеры и сделать так, чтобы они касались как можно меньшего числа строк в минимальном количестве таблиц.

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