0

我正在使用 automapper 在数据库和另一个表示之间映射一些对象。

实体看起来像

public class MyEntity {
    public int Id { get; set; }
    public Guid RowId { get; set; }
}  

public class MyObject {
    public Guid Id { get; set; }
}

如您所见,名称和类型未对齐。
由于我有很多实体和对象,我宁愿不要CreateMap<A, B>().ForMember(d => d.Id, mex => mex.MapFrom(s => s.RowId));.

不必执行上述约定:

AddMemberConfiguration()
    .AddMember<NameSplitMember>()
    .AddName<ReplaceName>(_ => _.AddReplace("RowId", "Id"));

这不是我怀疑它做的事情,我无法弄清楚如何使用 ReplaceName 约定。所以我想听听关于如何映射这些类型的想法。

MyEntity两者MyObject都是基本类型,所以我也可以使用它。

我试图用伪代码归档的内容:

if(source is MyEntity && target is MyObject)
{
     target.Id = source.RowId;
}

ForAllMembers
根据@lucian-bargaoanu 的推荐,我尝试调查ForAllMembers
我在 MapperProfile 中执行了以下操作:

public class MapperProfile : Profile {
     public MapperProfile() {
         ForAllMaps(MapEntityBaseId);
     }

    protected void MapEntityBaseId(TypeMap map, IMappingExpression mex)
    {
        if (!map.SourceType.IsSubclassOf(typeof(EntityBase)))
            return;
        if (!map.DestinationType.IsSubclassOf(typeof(MyObject)))
            return;

        mex.ForMember("Id", opt => opt.MapFrom("RowId"));
    }
}

调试器也提示我,ForAllMember按预期执行,它仍然无法映射。

我为 ForAllMembers 创建了一个 GIST:https ://gist.github.com/anonymous/511a1b69b795aa2bc7e7cd261fcb98b1

4

0 回答 0