Как сообщить NHibernate, что триггер обновляет другую таблицу?

Я только что получил исключение TooManyRowsAffectedException во время работы с NHibernate и я видел обходные пути для этого, внедрив другой дозатор, как здесь TooManyRowsAffectedException с зашифрованными триггерами , или изменив триггеры в базе данных, чтобы использовать SET NOCOUNT ON (я не могу использовать его, так как не Не хочу изменять базу данных - она ​​очень сложная, с более чем сотней таблиц, связанных вместе, и я не хочу связываться с ней, поскольку ее используют другие приложения). Я не понимаю, почему происходит это исключение. Все, что я делаю, это то, что у меня есть объект Sample, у которого есть пара значений, которые я проверяю, и если значения соответствуют заданным критериям, я устанавливаю для строки Sample.IsDone значение 'Y' (в нашей базе данных все логические значения представлены символ Y или N). Код очень прост:

IQueryable samples = session.Query().Where(s =­­> s.Value == desiredValue);
foreach (Sample sample in samples)
{
  sample.IsDone = 'Y';
  session.Flush(); // Throws TooManyRowsAffectedException
}
session.Flush(); // Throws TooManyRowsAffectedException

Вызов Flush вызывает, помещаю ли я его внутрь цикла или снаружи. Я что-то делаю не так или это связано только с тем, как создана база данных? Я пробовал вызвать SaveOrUpdate () в примере перед Flush (), но это ничего не изменило. Я знаю, что могу обойти это исключение, но я бы предпочел понять источник проблемы.

Примечание: в исключении он сообщает мне, что фактическое количество строк равно 2, а ожидаемое - 1. Почему он обновляет 2 строки поскольку я изменяю только 1 строку?

Всем спасибо за помощь!

РЕДАКТИРОВАТЬ:

Я смог выяснить, что причина этого в том, что в базе данных есть триггер, обновляющий строку в контейнере table (Контейнеры содержат образцы) при обновлении образца.Есть ли способ настроить NHibernate так, чтобы он знал об этом триггере и ожидал обновления нужного количества строк?

8
задан Community 23 May 2017 в 12:12
поделиться