現在、同じクラス間のオートマトンの設定で苦労しています。問題は、SaveOrUpdate()
を呼び出す前にNHibernateを使ってdbからエンティティを取得する必要があることです。私はId
とLocationId
以外のすべてのプロパティを置き換えます。Automapper UseDestinationValue not working
マッパー:マッパー
using (ITransaction t = NHibernateSession.Current.BeginTransaction())
{
var m = meetingRoomRepository.FindAll(new MeetingRoomByEmailSpecification(meetingRoom.Email)).FirstOrDefault();
m = meetingRoomMapper.MapFrom(meetingRoom);
meetingRoomRepository.SaveOrUpdate(m);
t.Commit();
}
の
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;
}
使い方私はm
が満たさlocationId
とId
を持っていますが、マッパー後には上書きされていることを確認することができ、コードをデバッグしていたときにmeetingRoom
のlocationId
とId
(これはデフォルトでは0です) )。
なぜ無視しないのですか? CreateMap().ForMember(x => x.Blarg、opt => opt.Ignore()); –
残念ながら、無視しないでください – pandemic