1

我从我的数据库返回了以下数据:

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)));

不过,似乎有点笨拙。

4

0 回答 0