自动映射错误:该类型没有默认构造函数

本文关键字:默认 构造函数 类型 映射 错误 | 更新日期: 2023-09-27 18:35:30

当我尝试将持久性对象映射到没有默认构造函数的域模型时,我遇到了错误。

public class SetupGroup {
    public List<CameraDisplayMap> Mappings { get; set; }
}
public class CameraDisplayMap {
    public Camera Camera { get; private set; }
    public Display Display { get; private set; }
    public CameraDisplayMap(Camera camera, Display display)
        ...
}

存储 库

public IEnumerable<CameraDisplayMap> GetSetupGroupMappings(int setupGroupId) {
    return ((IQueryable<SetupGroupPto> GetAll())
        .Where(x => x.Id == setupGroupId)
        .Select(x => x.Mappings) // returns CameraDisplayMapPto from SetupGroupPto
        .Project()
        .To<CameraDisplayMap>();
}

我已经尝试使用映射配置注册它...

Mapper.CreateMap<CameraDisplayMapPto, CameraDisplayMap>()
            .ConstructUsing(x => new CameraDisplayMap(x.Camera, x.Display));

。两者都使用 .ConstructUsing() 和 .ConvertUsing(),但它与自动映射器投影不起作用。

叠:

at System.Linq.Expressions.Expression.New(Type type) <---
at [..].ProjectionExpression`1.BuildExpression[TDest]()

自动映射错误:该类型没有默认构造函数

博加德,你摇滚!最新版本的自动映射器现在支持投影转换:

http://lostechies.com/jimmybogard/2014/12/23/automapper-3-3-feature-projection-conversions/

对于任何偶然发现这一点的人,从自动映射程序 3.3 版开始,您可以像这样声明投影转换:

Mapper.CreateMap<CameraDisplayMapPto, CameraDisplayMap>()
      ---->   .ConstructProjectionUsing(x => new CameraDisplayMap(x.Camera, x.Display));