NHibernate和AutoMapper玩得不好:"具有相同标识符值的不同对象已经存在"

Ste*_*ams 4 c# nhibernate fluent-nhibernate automapper asp.net-mvc-2

收到此错误:具有相同标识符值的另一个对象已与会话关联:27,实体:xxx.Core.Event

基本上,我有从我的poco映射的视图模型,反之亦然.违规代码在这里:

Mapper.CreateMap<EventsAddEditViewModel, Event>();
        Event thisEvent = _eventRepository.GetById(viewModel.Id);
        thisEvent = Mapper.Map<EventsAddEditViewModel, Event>(viewModel);
        thisEvent.EventType = new EventType { Id = viewModel.EventTypeId };
        ValidationResult result = _eventService.Save(thisEvent);
Run Code Online (Sandbox Code Playgroud)

基本上我是从数据库加载事件,然后将视图模型映射到此事件并保存.否则,视图上没有显示的字段(例如dateCreated)将无法正确保存.

有没有什么方法NHibernate和AutoMapper可以很好地发挥这方面的作用?

我正在为我的会话提供者使用OnePerRequestBehavior.

Lac*_*che 5

保存时给NHibernate提供相同的对象.

为此,我们使用不同的重载Mapper.Map().此外,当编译器可以找出类型时,不需要指定它们.

GetById()可能返回null.

Mapper.CreateMap<EventsAddEditViewModel, Event>();

Event thisEvent = _eventRepository.GetById( viewModel.Id );
if (thisEvent == null) {
    thisEvent = new Event();
}

Mapper.Map( viewModel, thisEvent );

thisEvent.EventType = new EventType { Id = viewModel.EventTypeId };
ValidationResult result = _eventService.Save( thisEvent );
Run Code Online (Sandbox Code Playgroud)