Как использовать Automapper для создания объекта без конструктора по умолчанию - PullRequest
16 голосов
/ 25 августа 2011

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

new Entity(int recordid);

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

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

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

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

Ответы [ 2 ]

33 голосов
/ 28 августа 2011

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

Попробуйте

Mapper.CreateMap<EntityDTO, Entity>().ConstructUsing(s => new Entity(s.RecordId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...