Свободный NHibernate Newbie: строка была обновлена ​​или удалена другой транзакцией

Я на ранних стадиях создания базы данных с помощью Fluent NHibernate. Я реализовал шаблон единиц работы в ASP.NET MVC 3, чтобы позволить NHibernate обновить схему моей базы данных для меня. Чтобы вставить / обновить мои начальные данные, у меня есть Database контроллер с Update действие, которое пытается SaveOrUpdate(...) User сущность (администратор) в Users Таблица.

После удаления всех пользовательских записей вручную через Visual Studio и повторного запуска моего Update действие по заселению Users Таблица, я получаю следующее NHibernate.StaleObjectStateException исключение:

Row was updated or deleted by another transaction (or unsaved-value mapping was
incorrect): [Invoicer.Data.Entities.User#3105248d-ca91-4c64-bf8f-9ebb017943b7]

Line 26:        {
Line 27:            if (_transaction.IsActive)
Line 28:                _transaction.Commit();
Line 29:        }

Примечание: сохраненный или обновленный идентификатор пользователя представляет собой Guid со значением выше (3105...).

Что я делаю неправильно?

2 ответа

Решение

Решено с картированием

NHibernate назначал мне идентификаторы пользователей (Guid), используя метод гребня Guid. Указание идентификатора вручную приводило к отключению отображения. Я предпочитаю назначать эти идентификаторы самостоятельно, поэтому я изменил User сопоставление идентификатора объекта для назначения вручную в моем UserMap учебный класс:

Id(x => x.Id).GeneratedBy.Assigned();

Эта ошибка также возникает, когда изменился контекст и вы, если вы PK является символом.

Решение применить Trim() в PK, когда Update(data, data.code.Trim());

Другие вопросы по тегам