У меня есть приложение ASP.NET MVC, которое использует Fluent NHibernate и AutoMapper. В основном я использую AutoMapper для сопоставления своих моделей с ViewModels и наоборот.Automapper with NHibernate - Как сохранить отображаемые объекты?
При выполнении последнего, сопоставления с моей модели просмотра назад к модели, мне интересно, как я могу сопоставить это с конкретным экземпляром из БД, поэтому, когда я передаю изменения обратно в БД (используя мой уровень репозитория NHibernate , через мой сервисный уровень), изменения сохраняются.
Пример:
var advert = Mapper.Map<AdvertViewModel, Advert>(model);
_advertService.UpdateAdvert(advert); // then calls repo which commits current NHibernate trans * Nothing in the DB changes *
Если я пытаюсь совершить мой NHibernate сессии, с тем чтобы обновить это объявление в БД, несмотря на объявление быть присвоен правильный ключ/Id, как часть отображения, я думаю, потому что сеанс NHibernate ничего не знает об этом экземпляре рекламы (?), он не записывает изменения.
Поэтому мне интересно, как обрабатывать этот сценарий сопоставления в сочетании с NHibernate?
Viewmodel уже содержит все, поэтому я пробовал ваше последнее решение. Теперь наше сопоставление с Fluent NH Advert выглядит как Id (x => x.Id) .GeneratedBy.Identity(). UnsavedValue (0); и я вызываю «SaveOrUpdate», но затем получаю ошибку «другой объект с тем же значением идентификатора уже был связан с сеансом:». Любая идея, где я, вероятно, ошибаюсь? –
marcusstarnes
Возможно, в вашем сеансе и управлении транзакциями. –
ошибка «другой объект с тем же значением идентификатора уже был связан с сеансом, как правило, возникает, когда вы пытаетесь сохранить объект на другом сеансе, который он получил. В качестве обходного пути вы можете попробовать Session.Merge, но для меня - вы должны улучшить свой жизненный цикл сеанса –