8

Bir özelliği bir nesneden farklı bir özellik adıyla başka bir nesneye nasıl eşleyebilirim? Farklı özellik adlarına sahip nesneler arasında eşleşme için ValueInjecter kullanma

Şöyle bir Product sınıf var:

public class Product : IEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Ve benzeri görünüm modeli görünür:

Product.Id => ProductSpecificationAddViewModel.ProductId 
Product.Name =>ProductSpecificationAddViewModel.ProductName 

: Aşağıdaki eşleme yapmak gerekir

public class ProductSpecificationAddViewModel 
{ 
    public int ProductId { get; set; } 
    public string ProductName { get; set; } 
} 

İşte benim hareket yöntemim:

public ActionResult Add(int id) 
{ 
    Product product = productService.GetById(id); 

    // Mapping 
    //ProductSpecificationAddViewModel viewModel = new ProductSpecificationAddViewModel(); 
    //viewModel.InjectFrom(product); 

    return View(viewModel); 
} 

Bunu nasıl yaparım?

cevap

8

o zaman bir ConventionInjection yazardı:

Mapper.CreateMap<Product, ProductSpecificationAddViewModel>() 
    .ForMember(destination => destination.ProductName, 
       options => options.MapFrom(
        source => source.Name)); 

Kişisel kontrolörü haritalama kodu o zaman bu basit olacaktır. . * Tek yapmanız + *, böylece TTarget.TSource ikinci numuneyi here

public class PropToTypeProp : ConventionInjection 
    { 
     protected override bool Match(ConventionInfo c) 
     { 
      return c.TargetProp.Name == c.Source.Type.Name + c.TargetProp.Name; 
     } 
    } 

bu enjeksiyon TSource tüm özelliklerinden yapacağız bakınız:

vm.InjectFrom<PropToTypeProp>(product); 
+0

ConventionInjection çalışmaz çünkü –

3

Sen AutoMapper ile kolayca yapabilirsiniz. Varsayılan olarak, sözleşmeyi kullanır (ör. Kimlik ve Ad ile Adı Eşleme), ancak özel eşlemeleri de tanımlayabilirsiniz. Eğer ValueInjecter kullanıyorsanız

Mapper.Map(product, viewModel); 
+0

Ben AutoMapper kolay biliyorum ama yapamıyorum Güven düzeyi nedeniyle web hosting sunucuları üzerinde kullanın, bu yüzden ValueInjecter için yerleşmek gerekir. –

+0

sadece merak ediyorum. Sunucuda Automapper için hangi güven düzeylerinin gerekli olduğu. Her ikisi de doğru mu? Reflection.Emit orta güven – user20358

+1

orta güven barındırma hizmeti artık dünyanın her yerinde bulunmazsa automapper ile ilgili sorunlar var. –

İlgili konular