Как использовать Automapper для создания объекта без конструктора по умолчанию

У моих объектов нет конструктора по умолчанию, все они требуют подписи

new Entity(int recordid);

Я добавил следующую строку:

Mapper.CreateMap<EntityDTO, Entity>().ConvertUsing(s => new Entity(s.RecordId));

Это устраняет проблему, когда Automapper ожидает конструктор по умолчанию, однако единственным отображаемым элементом является идентификатор записи.

Как мне получить его для нормального отображения? Как получить все свойства объектов для сопоставления без необходимости вручную сопоставлять свойства?

Ответы

Ответ 1

Вы можете использовать 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);
    }
}

Ответ 2

Try

Mapper.CreateMap<EntityDTO, Entity>().ConstructUsing(s => new Entity(s.RecordId));