【问题标题】:Automapping error: The type does not have a default constructor自动映射错误:该类型没有默认构造函数
【发布时间】:2015-02-25 16:11: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]()

【问题讨论】:

  • 你试过这样的事情吗? automapper.codeplex.com/… 创建实现 ITypeConverter&lt;&gt; 的类,然后在 convert 方法中,构造你的对象然后返回它。

标签: c# linq mapping expression automapper


【解决方案1】:

博加德,你摇滚!最新版本的 Automapper 现在支持投影转换:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-07-14
  • 2021-07-16
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多