2012-11-04 31 views
5

Ben this example on AutoMapper's GirHub okumuştum ama örnek sadece kimse InnerSource haritaya yolu, orada olacağım varsayar: EF ile oluşturulan, ben nesneleri seri ediyorum Projemin ileAutoMapper karmaşık iç içe eşleştirmeleri

Mapper.CreateMap<OuterSource, OuterDest>(); 
Mapper.CreateMap<InnerSource, InnerDest>(); 
Mapper.AssertConfigurationIsValid(); 

var source = new OuterSource 
    { 
     Value = 5, 
     Inner = new InnerSource {OtherValue = 15} 
    }; 

var dest = Mapper.Map<OuterSource, OuterDest>(source); 

o dairesel referanslar Bunun nedeni, farklı 'yönlerden' nesnelere gelmem gerekecek. Örneğin, bir kullanıcı listesi için istekte bulunursam, ilişkili oldukları projeleri görmek istiyorum. Bir proje için istekte bulunursam, o projeyle ilişkili kullanıcıları görmek istiyorum.

Bunlar dairesel referanslar vb User.Role.Project.TaskTime.User, User.TaskTime.Project.Task.TaskType.VisibleToRole.Role.User gibi

yüzden oldukça derin olması iç içe eşleme ihtiyaç oldukça derin alabilirsiniz ve iş böyle yapılır birinci haritalama ne bağlıdır.

Şu anda yapıyorum:

Mapper.CreateMap<User, UserFull>() 
    .ForMember("TaskTimes", opt => opt.MapFrom(src => Mapper.Map<ICollection<TaskTime>, UserTaskTime>(src.TaskTimes))); 
Mapper.CreateMap<TaskTime, UserTaskTime>() 
    .ForMember("Task", opt => opt.MapFrom(src => Mapper.Map<Task, UserTaskTimeTask>(src.Task))); 
//... 

ViewModels o pasajı için şu şekilde görünür: bu hak

public class UserFull 
{ 
    public string Email { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<TaskTime> TaskTimes { get; set; } 
    //... 
} 

public class UserTaskTime 
{ 
    public int Id { get; set; } 
    public Task Task { get; set; } 
    //... 
} 

public class UserTaskTimeTask 
{ 
    //... 
} 

mi? Her bir üyeyi viewmodel'den projelendirmeli ve projeksiyonu kullanarak elle haritalamalı mıyım? Yoksa bunu yapmanın daha temiz bir yolu var mı?

+0

Değerleri ViewModel'den DB varlıklarınıza eşlemek için automapper kullanıyor musunuz? AutoMapper'i bu amaçlar için kullanmamanızı ve el ile yapmamanızı şiddetle tavsiye ederim. Aksi halde, eşleme için eskileri kullanan yeni varlıklar eklerseniz, başarısız olacak eşleştirmeli eşleme profilleriyle sonuçlanacaksınız. –

cevap

0

Her üyeye iç içe eşleme projeksiyonu yapabilirsiniz. Benzer bir cevap, here gönderdim. Umarım yardımcı olur.

+0

Bu cevap, yuvalanmış dizinin düzleştirilmesiyle ilgilidir - sanırım, daha fazla bir şeyden sonra, http://stackoverflow.com/questions/13337063/nested-mappings-with-instance-version-of-automapper gibi öğelerin birbirlerine başvurduğundan bahseder. – Mightymuke

+0

Oh - Sadece onunla aynı posteri farkettim :) – Mightymuke

+0

Evet, başka bir soru sorduğumda, AutoMapper'ın örnek versiyonunu kullanarak anladım, buradaki problemi çözdüm. –