我从我的数据库返回以下数据:
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);
当我这样做时,会填充order.Number,但order.Address为null。当我在Order构造函数中创建Address类的新实例时,它不是null(如预期的那样),但没有设置任何属性。
我试过了:
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。没有任何效果。
我知道AutoMapper支持按惯例展平,我只能假设我发现按惯例进行投影(它识别AddressStreet应该映射到Address.Street)是不可能的。我错了吗?
如何使上述示例正常工作?
更新
我们已经能够使用以下方式让它工作:
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address,
opt => opt.MapFrom(src => Mapper.Map<Address>(src)));
但是,似乎有点笨拙。