8

मैं किसी ऑब्जेक्ट से किसी अन्य ऑब्जेक्ट में किसी अन्य प्रॉपर्टी नाम के साथ किसी प्रॉपर्टी को कैसे मैप कर सकता हूं?विभिन्न संपत्ति नामों के साथ ऑब्जेक्ट्स के बीच मैप करने के लिए ValueInjecter का उपयोग

मैं एक Product वर्ग है कि इस तरह दिखता है:

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

और दृश्य मॉडल की तरह दिखता है:

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

:

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

मैं निम्नलिखित मानचित्रण करने की जरूरत है यहां मेरी क्रिया विधि है:

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

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

    return View(viewModel); 
} 

मैं यह कैसे करूँगा?

उत्तर

8

आप ValueInjecter उपयोग कर रहे हैं तो आप एक ConventionInjection लिखना होगा:

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

आपका contoller मानचित्रण कोड तो इस सरल हो जाएगा। दूसरा नमूना here

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

इस इंजेक्शन TSource के सभी गुण से करना होगा देखें * TTarget.TSource करने के लिए + * है, तो आप कार्य करें:।

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

में काम नहीं करता है कन्वेंशन इंजेक्शन अब दुनिया में कहीं भी नहीं मिला है। –

3

आप आसानी से ऑटोमैपर के साथ ऐसा कर सकते हैं। डिफ़ॉल्ट रूप से सम्मेलन का उपयोग होता है (यानी आईडी आईडी और नाम से नाम), लेकिन आप कस्टम मैपिंग भी परिभाषित कर सकते हैं।

Mapper.Map(product, viewModel); 
+0

मैं जानता हूँ कि यह AutoMapper साथ आसान है लेकिन मैं नहीं कर सकता ट्रस्ट स्तर की वजह से इसे वेब होस्टिंग सर्वर पर उपयोग करें, इसलिए मुझे ValueInjecter के लिए व्यवस्थित करने की आवश्यकता है। –

+0

बस उत्सुक है। सर्वर पर ऑटोमैपर के लिए किस ट्रस्ट स्तर की आवश्यकता होती है। दोनों डीएलएस सही हैं? – user20358

+1

मध्यम ट्रस्ट होस्टिंग सेवा में ऑटोमैपर के साथ समस्याएं हैं क्योंकि प्रतिबिंब। प्रवेश मध्यम ट्रस्ट –

संबंधित मुद्दे

 संबंधित मुद्दे