Как использовать Automapper последней версии?

Я новичок в Automapper. С ссылками ниже, я пытаюсь понять это в действии.

Я использую его Automapper v 5.2.0

Вот мои вещи. https://codepaste.net/xph2oa

class Program
{
    static void Main(string[] args)
    {
        //PLEASE IGNORE NAMING CONVENTIONS FOR NOW.Sorry!!
        //on Startup 
        AppMapper mapperObj = new AppMapper();
        mapperObj.Mapping();

        DAL obj = new DAL();
        var customer = obj.AddCustomers();


    }
}

class Customer
{
    public int CustomerId { get; set; }

    public string CustName { get; set; }
}


class CustomerTO
{
    public int CustId { get; set; }

    public object CustData { get; set; }
}


class AppMapper
{
    public void Mapping()
    {
        var config = new MapperConfiguration(cfg =>
                    {
                        cfg.CreateMap<Customer, CustomerTO>();
                    });

        IMapper mapper = config.CreateMapper();

    }
}

class DAL
{
    public IEnumerable<CustomerTO> AddCustomers()
    {
        List<Customer> customers = new List<Customer>();
        customers.Add(new Customer() { CustName = "Ram", CustomerId = 1 });
        customers.Add(new Customer() { CustName = "Shyam", CustomerId = 2 });
        customers.Add(new Customer() { CustName = "Mohan", CustomerId = 3 });
        customers.Add(new Customer() { CustName = "Steve", CustomerId = 4 });
        customers.Add(new Customer() { CustName = "John", CustomerId = 5 });

        return customers;   //throws error

    }
}

Ошибка. Не удается неявно преобразовать тип System.Collections.Generic.List'в' System.Collections.Generic.IEnumerable'. Существует явное преобразование (вам не хватает приведения?)

Как мне карту List<Customer> в List<CustomerTO>?

Пожалуйста, обратите внимание, в Customer У меня есть свойство типа string с именем Custname в то время как CustomerTO У меня есть свойство с именем CustData типа object, Так как мне сопоставить это другое свойство name?

Благодарю.

1 ответ

Использование одинаковых имен для свойств в отображаемых типах - самый простой способ для нас, AutoMapper. Таким образом, ваш конфиг будет работать.

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

cfg.CreateMap<Customer, CustomerTO>()
.ForMember(dto => dto.CustData, opt => opt.MapFrom(entity => entity.CustName))
.ForMember(dto => dto.CustId, opt => opt.MapFrom(entity, entity.CustomerId));

Я предполагаю, что вы хотите прямую карту CustName в CustData выше, и это будет работать нормально.

Другие вопросы по тегам