2009-11-23 2 views
2

Есть ли крючок где-то внутри Linq to SQL, который позволит мне вручную изменить команду до ее отправки в базу данных?Linq to SQL: команда Ammend перед отправкой в ​​базу данных

В частности, я пытаюсь ввести синтаксис WITH CHANGE_TRACKING_CONTEXT(@contextData) всякий раз, когда в базу данных добавляется вставка/обновление/удаление, чтобы иметь возможность добавлять дополнительную информацию в отношении отслеживания изменений, например пользователя, который инициировал изменение (это это веб-приложение, использующее SQL Authentication).

Этот синтаксис просто должен быть вставлен в начале CommandText вместе с дополнительным параметром (@contextData), который добавляется к объекту SqlCommand, который будет содержать данные для дополнительной инструкции.

Заранее спасибо.

+0

FYI - Я обновил свой ответ ниже с некоторыми альтернативами. –

ответ

1

Вам не нужно изменять какой-либо SQL ... просто поставьте свой DataContext существующим SqlConnection. http://msdn.microsoft.com/en-us/library/bb386986.aspx

Перед отправкой изменений через DataContext.SubmitChanges, создать свой собственный SqlCommand (используя тот же SqlConnection вы создали свой DataContext с) для команды WITH CHANGE_TRACKING_CONTEXT и выполнить его. Этот оператор будет действителен в течение всего времени соединения с базой данных.

UPDATE: Так что не работает, и если делать отслеживания изменений вручную не вариант (через DataContext.GetChangeSet который что я делаю на моем текущем приложении), я думаю, что вы собираетесь быть застрял делая почти что уродливейшую вещь возможно: specify the SQL statements for all of your INSERT/UPDATE/DELETE through partial methods on your DataContext (последний раздел). Или даже уродливее, используйте DataContext.Log для регистрации всего сгенерированного SQL, выполните команду SubmitChanges в транзакции, сверните ее, затем измените SQL, который вы выберете из журнала, и выполните его по желанию.

+0

Мне нравится эта идея. Мне нужно будет увидеть, могу ли я ввести это в цепочку SubmitChanges через наследование. Позвольте вам знать, как я себя чувствую. Спасибо. –

+0

К сожалению, выдача инструкции сама по себе, без последующей команды обновления, приводит к ошибке. Мне нужно будет найти способ вставить его в фактические команды обновления. Спасибо, в любом случае. –

+0

FYI - Я обновил ответ выше с некоторыми альтернативами. –

Смежные вопросы