我从我的数据库返回了以下数据:
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 为空。当我在 Order 构造函数中创建 Address 类的新实例时,它不为空(如预期的那样),但没有设置任何属性。
我试过了:
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address, opt => opt.MapFrom(src => src));
并将列名更改为简单的“Street”、“City”和“State”,但没有成功。
我试过了:
Mapper.CreateMap<IDataReader, Address>();
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address, opt => opt.UseDestinationValue());
以及其中的所有组合。我什至为 Address 上的每个属性指定了 ForMembers。没有任何效果。
我知道 AutoMapper 支持按惯例展平,我只能根据我发现的情况假设按惯例进行投影(它认为 AddressStreet 应该映射到 Address.Street)是不可能的。我错了吗?
我如何让上面的例子工作???
更新
我们已经能够使用它来工作:
Mapper.CreateMap<IDataReader, Order>()
.ForMember(target => target.Address,
opt => opt.MapFrom(src => Mapper.Map<Address>(src)));
不过,似乎有点笨拙。