5

簡単な親子のシナリオを書きましたが、Automapper を使用してマッピングできませんでした。次のシナリオでは、OrderItems のリストが dtoOrderItems のリストにマップされることを期待していますが、自動的には行われません。for ループなどを使用して手動で記述する必要がありますか?

public class Order
{
    public int OrderNumber {get; set;}
    public List<OrderItem> OrderItems { get; set; }

    public Order()
    {
        OrderItems = new List<OrderItem>();
        OrderItems.Add(new OrderItem() {Quantity= 10});
    }
}

public class OrderItem
{
    public int Quantity {get; set;}
}

public class DTOOrder
{
    public int DTOOrderNumber { get; set; }
    public List<DTOOrderItem> DTOOrderItems { get; set; }

    public DTOOrder()
    {
        DTOOrderItems = new List<DTOOrderItem>();           
    }
}

public class DTOOrderItem
{
    public int DTOQuantity { get; set; }
}


public DTOOrder TestConversion ()
{
    AutoMapper.Mapper.CreateMap<OrderItem, DTOOrderItem>();
    AutoMapper.Mapper.CreateMap<Order, DTOOrder>();

    Order order = new Order();                  
    var dtoOrder = AutoMapper.Mapper.Map<Order, DTOOrder>(order);           
    return dtoOrder;
}
4

2 に答える 2

6

コレクションがマップされない理由は、1つのコレクション名がOrderItemsで、もう1つがDTOOrderItemsであるためです。Automapperはプロパティを名前でマップし(大文字と小文字を区別)、これを解決できません。
これを解決するには、次
の手順に従います。1)DTOOrderItems(DTOクラス内)の名前をOrderItemsに変更する
か、
2)AutomapperAPIのForMemberメソッドを使用してこのプロパティのマッピングをオーバーライドします。このようなもの:

AutoMapper.Mapper.CreateMap<Order, DTOOrder>()
    .ForMember(o => o.OrderItems, dto => dto.DTOOrderItems)

数量プロパティと注文番号プロパティで発生するのと同じ問題。

于 2012-10-23T06:25:58.633 に答える
0

これらを拡張メソッドに記述できます。すべてのページでループする代わりに、1 つのページに残り、重複するコードなしで再利用できます。

public static List<testMOdel> ToModelList(this List<testEntity> objlist)
        {
            List<testMOdel> list = new List<testMOdel>();
            foreach (var item in objlist)
            {
                list.Add((Mapper.Map<testEntity, testMOdel>(item)));
            }
            return list;
        }
        public static List<testEntity> ToEntityList(this List<testMOdel> modellist)
        {
            List<testEntity> list = new List<testEntity>();
            foreach (var item in modellist)
            {
                list.Add((Mapper.Map<testMOdel, testEntity>(item)));
            }
            return list;
        } 
于 2012-10-23T06:40:08.820 に答える