我的对象没有默认构造函数,它们都需要一个签名
new Entity(int recordid);
我添加了以下这行代码:
Mapper.CreateMap<EntityDTO, Entity>().ConvertUsing(s => new Entity(s.RecordId));
这解决了Automapper期望有默认构造函数的问题,然而只映射的元素是记录ID。
如何让它使用正常的映射方式?如何使所有实体的属性都被映射,而不必手动映射属性?
我的对象没有默认构造函数,它们都需要一个签名
new Entity(int recordid);
我添加了以下这行代码:
Mapper.CreateMap<EntityDTO, Entity>().ConvertUsing(s => new Entity(s.RecordId));
这解决了Automapper期望有默认构造函数的问题,然而只映射的元素是记录ID。
如何让它使用正常的映射方式?如何使所有实体的属性都被映射,而不必手动映射属性?
你可以使用 ConstructUsing
替代 ConvertUsing
。这是一个演示:
using System;
using AutoMapper;
public class Source
{
public int RecordId { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
}
public class Target
{
public Target(int recordid)
{
RecordId = recordid;
}
public int RecordId { get; set; }
public string Foo { get; set; }
public string Bar { get; set; }
}
class Program
{
static void Main()
{
Mapper
.CreateMap<Source, Target>()
.ConstructUsing(source => new Target(source.RecordId));
var src = new Source
{
RecordId = 5,
Foo = "foo",
Bar = "bar"
};
var dest = Mapper.Map<Source, Target>(src);
Console.WriteLine(dest.RecordId);
Console.WriteLine(dest.Foo);
Console.WriteLine(dest.Bar);
}
}
尝试
Mapper.CreateMap<EntityDTO, Entity>().ConstructUsing(s => new Entity(s.RecordId));