Как использовать Automapper для создания объекта без конструктора по умолчанию
Мои объекты не имеют конструктора по умолчанию, все они требуют подписи
new Entity(int recordid);
Я добавил следующую строку:
Mapper.CreateMap<EntityDTO, Entity>().ConvertUsing(s => new Entity(s.RecordId));
Это устраняет проблему, когда Automapper ожидает конструктор по умолчанию, однако единственным отображаемым элементом является идентификатор записи.
Как я могу получить это, чтобы поднять на это нормальное отображение? Как получить все свойства сущностей для сопоставления без необходимости вручную сопоставлять свойства?
2 ответа
Решение
Вы могли бы использовать 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));