Свободный 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())
;