Старый пост, но, надеюсь, моя информация кому-нибудь поможет. Я получал похожую ошибку, но только при сохранении ассоциаций после добавления нового объекта. Ошибка была в форме:
NHibernate.StaleObjectStateException: строка была обновлена или удалена другой транзакцией (или сопоставление несохраненного значения было неправильным) [My.Entity # 0]
Обратите внимание на ноль в конце, который является моим идентификатором. Не следует пытаться сохранить с нулевым ключом, так как я использовал спецификацию идентичности в SQL Server (генератор класса = нативный). Я не изменил свое несохраненное значение в xml, поэтому понятия не имел, в чем проблема; по какой-то причине NHibernate пытался выполнить обновление, используя значение ключа в качестве 0 вместо сохранения (и получения следующего идентификатора ключа) для моего нового объекта.
В конце концов я обнаружил, что причина была в том, что я инициализировал номер версии 1 для нового объекта в моем конструкторе! Хотя мое свойство идентификатора было нулевым, по какой-то причине NHibernate также искал свойство версии, равное нулю, чтобы идентифицировать его как несохраненный временный экземпляр. Книга «NHibernate в действии» на самом деле упоминает об этом на странице 120, но по какой-то причине мои объекты были в порядке, когда обычно сохранялись с номером версии 1, и не работали только при сохранении нового объекта через ассоциацию.
Поэтому убедитесь, что вы не установили значение версии (оставьте как ноль или ноль).