c# - AutoMapper:映射记录类型的问题
问题描述
我在这个类的 c# 9 中使用 automapper 10.1.1 进行映射
public record BFrom
{
public Guid Id { get; init; }
public Guid DbExtraId { get; init; }
}
进入这个
public record ATo(Guid Id, Guid ExtraId) : BaseTo(Id);
并具有以下配置
CreateMap<BFrom, ATo>()
.ForMember("ExtraId", opt => opt.MapFrom(src => src.DbExtraId))
.ReverseMap();
但是当我尝试映射它时会遇到一个问题,它会抛出一个异常,并带有一条消息,该消息需要一个带有 0 args 或只有可选 args 的构造函数。是否可以在不更改记录类型的情况下解决此问题?
解决方案
我遇到了同样的问题,最终创建了这个扩展方法来解决它:
public static class AutoMapperExtensions
{
public static IMappingExpression<TSource, TDestination> MapRecordMember<TSource, TDestination, TMember>(
this IMappingExpression<TSource, TDestination> mappingExpression,
Expression<Func<TDestination, TMember>> destinationMember, Expression<Func<TSource, TMember>> sourceMember)
{
var memberInfo = ReflectionHelper.FindProperty(destinationMember);
string memberName = memberInfo.Name;
return mappingExpression
.ForMember(destinationMember, opt => opt.MapFrom(sourceMember))
.ForCtorParam(memberName, opt => opt.MapFrom(sourceMember));
}
}
然后你只需像这样使用它:
CreateMap<BFrom, ATo>()
.MapRecordMember(a => a.ExtraId, src => src.DbExtraId)
.ReverseMap();
它将负责注册构造函数和成员,这样您就不会遇到此类问题。
推荐阅读
- c++ - 无法使用 DWM 在自定义窗口框架上绘图
- ruby-on-rails - 接受属性的字符串输入,将整数存储在数据库中,在 API 中返回字符串
- amazon-web-services - 使用 Terraform 旋转具有一定有效性的 AWS EC2 Spot 实例
- html - 如何构建所有具有相同宽度的 DIV 的响应式网格
- reactjs - 如何处理 setState 是异步的?
- assembly - 如何计算 MIPS ASSEMBLY 中标签的地址?
- javascript - Quasar Cordova 谷歌地图插件
- javascript - 找到点之间的路径。迷宫算法太慢
- mysql - SQL合并不同的表数据计数
- javascript - 如何将base13字符串转换为base64