Linq To Sql - обновить значение при изменении другого значения - PullRequest
2 голосов
/ 03 апреля 2009

С Linq To Sql - каков наилучший способ обновить значение одной таблицы в базе данных, когда значение изменяется в другой таблице?

Например, в Таблице A есть столбец с именем DateModified. Таблица A имеет связь с таблицей B. Теперь я хочу установить значение поля DateModified на текущую дату каждый раз, когда запись изменяется в таблице A, И каждый раз, когда дочерняя запись создается / обновляется / удаляется в TableB.

Как этого достичь?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2009

Если изменение было только в одной записи, вы можете использовать либо частичные методы On*Changed, либо вы можете переопределить SubmitChanges в контексте данных, вызвать GetChangeSet и применить изменения непосредственно перед тем, как они будут внесены. обновлено. Последний (контекст данных) подход полезен для выявления широкого спектра изменений, тогда как подход On*Changed полезен для логики, специфичной для отдельных свойств.

Однако в представленном случае (неоднородные обновления) я ожидаю, что триггер базы данных может быть более подходящим.

2 голосов
/ 03 апреля 2009

Вы можете зарегистрировать обработчик события PropertyChanged на дочернем объекте в OnCreated (реализованном в частичном классе), и этот обработчик обновит родительское свойство. Если вас не волнует, что уже загруженные классы получат изменения, использование триггера БД, как предполагает @Marc, также будет возможным.

РЕДАКТИРОВАТЬ : Если вам также нужно перехватывать удаления, вы можете реализовать метод частичного удаления для контекста данных, чтобы вызвать тот же метод обработчика для обновления родительского объекта удаляемой сущности.

0 голосов
/ 03 апреля 2009

Либо вставьте / обновите / удалите в TableB через StoredProcedure, которая позволяет выполнять обновление для TableA, либо используйте триггеры вставки / обновления / удаления для TableB, которые обновляют TableA

Я бы не пытался выполнить это в LINQ, поскольку это потребовало бы либо переопределения различных структур кода, сгенерированных IDE (кошмар обслуживания), либо дополнительных вызовов в базу данных, чтобы получить связанный элемент TableA.

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