1

AfterMapforを設定する必要がありAutoMapperますが、実行時に必要に応じてマップを作成しているため、汎用バージョンは使用していません。ジェネリック バージョンを使用する場合は、次のようにします。

Mapper.CreateMap<DALEntity, BLLEntity>()
    .AfterMap((DALEntity dalEntity, BLLEntity bllEntity) =>
        (bllEntity as DomainEntityBase).State = DomainEntityState.Unchanged);

正常に動作します。実行時までわからない他のマップは、次のように作成しています。

Type BLLClassType = Type.GetType(BLLClassName);
Type DALClassType = Type.GetType(DALClassName);
Mapper.CreateMap(DALClassType, BLLClassType);

しかし、今は設定できませんAfterMap。助言がありますか?AutoMapper がそのビットを実行しStateた後で、 のプロパティを設定する必要があるだけです。bllEntity

4

2 に答える 2

3

カスタム値リゾルバーを作成します。

public class StateResolver : IValueResolver
{
    public ResolutionResult Resolve(ResolutionResult source)
    {
        return source.New(DomainEntityState.Unchanged);
    }
}

使用法:

Type BLLClassType = Type.GetType(BLLClassName);
Type DALClassType = Type.GetType(DALClassName);

Mapper.CreateMap(DALClassType, BLLClassType)
      .ForMember("State", opt => opt.ResolveUsing<StateResolver>());
于 2012-12-17T17:49:06.660 に答える
0

である必要がありAfterMapますか?たとえば、次のUseValueように使用できます。

Mapper.CreateMap<DALEntity, BLLEntity>()
    .ForMember(dest => dest.State,
               opt => opt.UseValue(DomainEntityState.Unchanged));
于 2012-12-17T17:26:19.813 に答える