Я думаю, что у вас есть проблема управления сеансом здесь. Как RepositoryFactory.ProjectWizardRepository.GetById создает и, возможно, удаляет сеанс NHibernate? Создает ли, а затем закрывает сеанс?
Похоже, что DBHelper.GetProjectEntity () создает или загружает ProjectEntity. Позже, когда я вызвал сеттер CurrentStepNumber, вы вставляете или обновляете объект в базе данных.
Проблема в том, что когда DBHelper.GetProjectEntity () загружает существующий объект и затем закрывает сессию после того, как он был загружен, но держит объект рядом, мы попадаем в глубокую воду. Когда объект позднее обновляется, вы устанавливаете новое значение для CurrentStepNumber и отправляете объект в NHibernate для сохранения. Проблема здесь в том, что объект не связан с новым сеансом, который создается и закрывается во время сохранения. Затем Nhibernate запутывается, так как обнаружен новый объект, который не загружается из текущего сеанса, но имеет идентификатор существующего объекта.
В качестве решения, Google для «управления сессиями NHibernate asp.net», и вы получите множество хороших отзывов о том, как использовать цикл запросов ASP.NET в качестве единицы работы.