我有一個使用Fluent NHibernate和AutoMapper的ASP.NET MVC應用程序。 我主要使用AutoMapper將我的模型映射到ViewModel,反之亦然。與NHibernate自動映射器 - 如何持久化映射的對象?
當做後者,從我的viewmodel映射回模型,我想知道如何將它映射到數據庫中的特定實例,所以當我將更改提交回數據庫(使用我的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的會議,以更新此廣告在DB儘管廣告被分配正確的密鑰/ ID作爲映射的一部分,我想因爲NHibernate會話對這個廣告實例(?)一無所知,它不會寫出更改。
因此,我想知道如何處理與NHibernate結合的映射場景?
viewmodel已經包含了所有東西,所以我試過你的後一種解決方案。我的Fluent NH Advert映射現在看起來像Id(x => x.Id).GeneratedBy.Identity()。UnsavedValue(0);並且我調用'SaveOrUpdate',但是然後得到錯誤'具有相同標識符值的不同對象已經與會話相關聯:'。任何想法,我可能會出錯? –
marcusstarnes
也許在你的會話和交易管理中。 –
錯誤'具有相同標識符值的不同對象已與該會話相關聯,通常會在嘗試將實體保存在其生成的不同會話中時發生。作爲解決方法,您可以嘗試Session.Merge,但對於我來說 - 您應該改善會話生命週期 –