c# - 自动映射器 UseDestinationValue 不起作用

标签 c# automapper

目前正在努力解决同一类之间的自动映射器设置。问题是我需要在调用 SaveOrUpdate() 之前使用 NHibernate 从数据库获取实体。然后,我将替换除 IdLocationId 之外的所有属性。

映射器:

public Domain.DomainObjects.Entities.MeetingRoom MapFrom(Domain.DomainObjects.Entities.MeetingRoom input)
        {
            if (!initialized)
            {
                lock (Sync)
                {
                    if (!initialized)
                    {
                        Mapper.CreateMap<Domain.DomainObjects.Entities.MeetingRoom, Domain.DomainObjects.Entities.MeetingRoom>()
                .ForMember(x => x.Id, opt => opt.UseDestinationValue())
                .ForMember(x => x.LocationId, opt => opt.UseDestinationValue());

                        initialized = true;
                    }
                }
            }

            if (input == null)
            {
                throw new NullReferenceException("MeetingRoom is not set!");
            }

            var result = (Domain.DomainObjects.Entities.MeetingRoom)Mapper.Map(input, input.GetType(), typeof(Domain.DomainObjects.Entities.MeetingRoom));

            return result;
        }

映射器的使用

using (ITransaction t = NHibernateSession.Current.BeginTransaction())
{
    var m = meetingRoomRepository.FindAll(new MeetingRoomByEmailSpecification(meetingRoom.Email)).FirstOrDefault();

    m = meetingRoomMapper.MapFrom(meetingRoom);

    meetingRoomRepository.SaveOrUpdate(m);

    t.Commit();
}

当我调试代码时,我可以看到 m 已填充 locationIdId 但在映射器之后它被 覆盖meetingRoom 的 code>locationIdId(默认为 0)。

最佳答案

查看您用于绘制 map 的线。

m = meetingRoomMapper.MapFrom(meetingRoom);

您正在获取 meetingRoomMapper.MapFrom(meetingRoom) 的结果并将其分配给 m。问题是,meetingRoomMapper.MapFrom 甚至无法了解 m 的属性。您不能期望看起来像 m = ... 的行不会替换 m 表示的整个对象。

相反,您应该寻找一个将目标对象作为其参数之一的映射函数。

m = Mapper.Map(meetingRoom, m);

关于c# - 自动映射器 UseDestinationValue 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330824/

相关文章:

filter - 使用 automapper 将过滤器应用于集合

visual-studio-2013 - automapper dll 出现在解决方案资源管理器的项目根目录中

c# - 在 POCO 中使用 AutoMapper?

c# - Automapper 返回一个空集合,我想要一个 null

c# - 防止 ScrollViewer 处理鼠标滚轮事件

c# - 为什么这个 AutoMapper 配置不能正确映射?

c# - 使用 ClosedXML 库将字典写入 Excel

c# 获取TreeView父节点列表

c# - DataGridView 最后一列不能调整得更宽

c# - gridview 单元格内的 Javascript 验证