2012-05-18 36 views
5

EDIT: Tiêu đề không đúng, tôi đang cố ánh xạ từ danh sách nguồn vào danh sách nguồn của mô hình lồng nhau.Bản đồ AutoMapper từ bộ sưu tập lồng nhau nguồn đến bộ sưu tập khác

Tôi đang gặp sự cố khi cố ánh xạ danh sách đến danh sách khác được liệt kê trong mô hình lồng nhau. Loại và un-flatten của các loại. Vấn đề là tôi không biết làm thế nào để làm các ánh xạ.

Dưới đây là bộ của tôi lên sau lần thất bại của tôi ở bản đồ:

public class DestinationModel 
{ 
    public DestinationNestedViewModel sestinationNestedViewModel { get; set; } 
} 

public class DestinationNestedViewModel 
{ 
    public List<ItemModel> NestedList { get; set; } 
} 

public class SourceModel 
{ 
    public List<Item> SourceList { get; set; } 
} 

đâu Item và ItemModel đã có một ánh xạ được định nghĩa giữa chúng

Tôi không thể làm điều đó theo cách này ...

Mapper.CreateMap<SourceModel, DestinationModel>() 
.ForMember(d => d.DestinationNestedViewModel.NestedList, 
    opt => opt.MapFrom(src => src.SourceList)) 

LỖI:

Biểu hiện 'd => d.DestinationNestedViewMode l.NestedList' phải giải quyết để tên member.Parameter top-level: LambdaExpression

sau đó tôi đã cố gắng một cái gì đó như thế này:

.ForMember(d => d.DestinationNestedViewModel, 
o => o.MapFrom(t => new DestinationNestedViewModel { NestedList = t.SourceList })) 

Vấn đề có NestedList = t.SourceList. Mỗi phần tử có chứa các phần tử khác nhau, MụcModelMục tương ứng. Vì vậy, họ cần phải được ánh xạ.

Tôi làm cách nào để lập bản đồ này?

+0

Tôi không chắc chắn nếu tôi hiểu nó một cách chính xác , nhưng tôi nghĩ bạn cần tạo một ánh xạ từ Item tới ItemModel, vì vậy AutoMapper biết cách ánh xạ các đối tượng Item tới các đối tượng ItemModel. –

+0

Có một ánh xạ đã được xác định giữa Item và ItemModel, nhưng ánh xạ không được kích hoạt bởi vì NestedList thuộc về một DestinationModel mà lần lượt thuộc về DestinationNestedViewModel. Automapper không thể xử lý 2 tầng của mô hình khi ánh xạ (ít nhất không phải cách tôi đã thử) – getit

Trả lời

11

Tôi nghĩ rằng bạn muốn một cái gì đó như thế này:

Mapper.CreateMap<Item, ItemModel>(); 

/* Create a mapping from Source to Destination, but map the nested property from 
    the source itself */ 
Mapper.CreateMap<SourceModel, DestinationModel>() 
    .ForMember(dest => dest.DestinationNestedViewModel, opt => opt.MapFrom(src => src)); 

/* Then also create a mapping from Source to DestinationNestedViewModel: */ 
Mapper.CreateMap<SourceModel, DestinationNestedViewModel>() 
    .ForMember(dest => dest.NestedList, opt => opt.MapFrom(src => src.SourceList)); 

Sau đó, tất cả các bạn cần phải làm là gọi Mapper.Map giữa SourceDestination:

Mapper.Map<SourceModel, DestinationModel>(source); 
+0

bản đồ đầu tiên các bộ sưu tập của cả hai đối tượng .. sau đó xác định ánh xạ cho các đối tượng riêng lẻ trong các bộ sưu tập đó .. automapper rất tuyệt – hanzolo

Các vấn đề liên quan