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