У меня есть следующие данные, возвращенные из моей базы данных:
Number, AddressStreet, AddressCity, AddressState
Мои доменные объекты выглядят следующим образом:
public class Order
{
public Address Address { get; set; }
public String Number { get; set; }
}
public class Address
{
public String City { get; set; }
public String State { get; set; }
public String Street { get; set; }
}
Используя встроенный DataReaderMapper, отображение из IDataReader, содержащееданные базы данных просты, за исключением того, что я не могу заполнить объект Address.
В идеале я хотел бы использовать DynamicMap следующим образом:
var order = Mapper.DynamicMap<Order>(dataReader);
Когда я это сделаю, упорядочите.Номер заполнен, но порядок. Адрес нулевой.Когда я создаю новый экземпляр класса Address в конструкторе Order, он не равен нулю (как и ожидалось), но ни одно из свойств не установлено.
Я пробовал:
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address, opt => opt.MapFrom(src => src));
иизменил имена столбцов на простые "Улица", "Город" и "Штат", но безуспешно.
Я пробовал:
Mapper.CreateMap<IDataReader, Address>();
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address, opt => opt.UseDestinationValue());
и все их комбинации.Я даже указал ForMembers для каждого свойства в Address.Ничего не помогло.
Я знаю, что AutoMapper поддерживает выравнивание по соглашению, я могу только предположить, исходя из того, что я нахожу, что проекция по соглашению (где он распознает, что AddressStreet должен быть сопоставлен с Address.Street) невозможна.Я не прав?
Как мне заставить работать приведенный выше пример ???
ОБНОВЛЕНИЕ
Мы смогли заставить его работатьиспользуя:
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address,
opt => opt.MapFrom(src => Mapper.Map<Address>(src)));
Кажется, что это довольно грязно.