我正在使用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