Как использовать Automapper последней версии?
Я новичок в Automapper. С ссылками ниже, я пытаюсь понять это в действии.
- http://automapper.org/
- https://lostechies.com/jimmybogard/2016/01/21/removing-the-static-api-from-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
выше, и это будет работать нормально.