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
Ş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ı?
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. –