Ошибка триггера аудита nhibernate - PullRequest
0 голосов
/ 16 мая 2011

Я использую триггеры в своей базе данных sql для сбора информации об изменениях для таблицы, однако, похоже, что проблема связана с nhibernate.

В таблице есть несколько столбцов, первичных ключей и триггеров.,Триггеры выглядят так:

CREATE TRIGGER [dbo].[tr_Instrument_update] ON [dbo].[Instrument] FOR UPDATE AS
BEGIN
  INSERT [MyAudit].[audit].[Instrument]
  SELECT 'Updated', i.*
    FROM inserted
   INNER JOIN [MyAudit].[dbo].[Instrument] i ON inserted.[InstrumentID] = i.[InstrumentID]
END

В основном при каждом изменении мы копируем строку в таблицу аудита.Я проверил, и если я изменяю данные напрямую через sql management studio, триггеры работают правильно, и я получаю данные, записанные в таблицу аудита, однако, если я обновляю через свое приложение, я получаю следующее:

NHibernate.Исключение StaleObjectStateException не было обработано кодом пользователя
Сообщение = строка была обновлена ​​или удалена другой транзакцией (или сопоставление несохраненного значения было неверным)

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

1 Ответ

0 голосов
/ 16 мая 2011

Выяснил, что триггер заставил Nhibernate сделать два идентичных вызова обновления по какой-то причине. Решение состояло в том, чтобы установить NOCOUNT ON внутри триггера. Хотя до сих пор не уверен, почему nhibernate делает два обновления!

...