目前正在努力设置相同类之间的automapper。问题是我需要在调用SaveOrUpdate()
之前使用NHibernate从db获取实体。我正在替换除Id
和LocationId
之外的所有属性。
映射器:
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;
}
使用mapper
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
已填充locationId
和Id
,但在映射器之后,它会被locationId
和{{1}覆盖} Id
(默认为0)。
答案 0 :(得分:2)
查看您用于映射的行。
m = meetingRoomMapper.MapFrom(meetingRoom);
您正在获取meetingRoomMapper.MapFrom(meetingRoom)
的结果并将其分配给m
。问题是,meetingRoomMapper.MapFrom
无法知道m
的属性。您不能指望看起来像m = ...
的行不能替换m表示的整个对象。
相反,您应该寻找一个映射函数,它将目标对象作为其参数之一。
m = Mapper.Map(meetingRoom, m);