Tôi đang gặp sự cố với AutoMapper 2.1.267.0 khi làm việc với các đối tượng có chứa các bộ sưu tập của các lớp dẫn xuất. tôi đã cô lập vấn đề của tôi trong một kịch bản đơn giản với các loại sau đây:AutoMapper không hoạt động với bộ sưu tập các lớp dẫn xuất
public class ClassABase
{
public string Name { get; set; }
}
public class ClassA : ClassABase
{
public string Description { get; set; }
}
public class ClassBBase
{
public string Title { get; set; }
}
public class ClassB : ClassBBase
{
public string Text { get; set; }
}
public class ContainerA
{
public IList<ClassA> ClassAList { get; set; }
public ClassA ClassA { get; set; }
}
public class ContainerB
{
public IList<ClassB> ClassBList { get; set; }
public ClassB ClassB { get; set; }
}
và những ánh xạ
public class ClassABaseToClassBBase : Profile
{
protected override void Configure()
{
CreateMap<ClassABase, ClassBBase>()
.Include<ClassA, ClassB>()
.ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Name));
Mapper.AssertConfigurationIsValid();
}
}
public class ClassAToClassB : Profile
{
protected override void Configure()
{
CreateMap<ClassA, ClassB>()
.ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Description));
Mapper.AssertConfigurationIsValid();
}
}
public class ContainerAToContainerB : Profile
{
protected override void Configure()
{
CreateMap<ContainerA, ContainerB>()
.ForMember(dest => dest.ClassBList,
opt => opt.MapFrom(src => Mapper.Map<IList<ClassA>, IList<ClassB>>(src.ClassAList)))
.ForMember(dest => dest.ClassB, opt => opt.MapFrom(src => src.ClassA));
}
}
Đây là khởi
Mapper.Initialize(x =>
{
x.AddProfile<ClassABaseToClassBBase>();
x.AddProfile<ClassAToClassB>();
x.AddProfile<ContainerAToContainerB>();
});
và một sơ đồ tóm tắt tất cả mọi thứ (Mũi tên màu đỏ thể hiện ánh xạ AutoMapper)
Tôi đã ánh xạ bản sao ContainerA lên ContainerB. Kịch bản đầu tiên này hoạt động đúng. Các đối tượng đích được đầy đủ đầy như thể hiện trong hình ảnh dưới đây:
Nhưng nếu tôi thêm bản đồ này
public class ClassBBaseToClassB : Profile
{
protected override void Configure()
{
CreateMap<ClassBBase, ClassB>()
.ForMember(dest => dest.Text, opt => opt.Ignore());
Mapper.AssertConfigurationIsValid();
}
}
Mapper.Initialize(x =>
{
x.AddProfile<ClassABaseToClassBBase>();
x.AddProfile<ClassAToClassB>();
x.AddProfile<ClassBBaseToClassB>();
x.AddProfile<ContainerAToContainerB>();
});
kết quả là
Thuộc tính "Văn bản" của tất cả các phần tử của bộ sưu tập trở thành rỗng. Như bạn có thể thấy trong hình ảnh, thuộc tính "Văn bản" của đối tượng containerB.ClassB vẫn được ánh xạ chính xác. Điều này chỉ xảy ra với các bộ sưu tập. Tôi không biết chuyện gì đang xảy ra. Bất kì manh mối nào?
Cảm ơn
gì kết quả mà bạn đang mong đợi? – Cybermaxs
Tôi đã mong đợi tất cả các phần tử từ containerB.ClassBList được điền đầy đủ, thay vì có các thuộc tính rỗng. – peflorencio