आप इसके लिए उपयोग कर सकते हैं Tuple
:
Mapper.CreateMap<Tuple<People, Phone>, PeoplePhoneDto>()
.ForMember(d => d.FirstName, opt => opt.MapFrom(s => s.Item1.FirstName))
.ForMember(d => d.LastName, opt => opt.MapFrom(s => s.Item1.LastName))
.ForMember(d => d.Number, opt => opt.MapFrom(s => s.Item2.Number ));
यदि आपके पास अधिक स्रोत मॉडल हैं तो आप एक अलग प्रतिनिधित्व (सूची, शब्दकोश या कुछ और) का उपयोग कर सकते हैं जो स्रोत के रूप में इन सभी मॉडलों को एक साथ इकट्ठा करेंगे।
उपर्युक्त कोड को कुछ ऑटोमैपररॉन्फ़िगरेशन फ़ाइल में प्रेफैबी को रखा जाना चाहिए, एक बार और विश्व स्तर पर सेट किया गया है और फिर जब लागू किया जाता है।
डिफ़ॉल्ट रूप से AutoMapper केवल एक डेटा स्रोत का समर्थन करता है। तो सीधे कई स्रोतों को सेट करने की कोई संभावना नहीं है (एक संग्रह में इसे लपेटे बिना) क्योंकि तब हमें कैसे पता चलेगा कि अगर दो स्रोत मॉडल में समान नाम वाले गुण हैं तो क्या होगा?
हालांकि इसे प्राप्त करने के लिए कुछ समाधान है:
public static class EntityMapper
{
public static T Map<T>(params object[] sources) where T : class
{
if (!sources.Any())
{
return default(T);
}
var initialSource = sources[0];
var mappingResult = Map<T>(initialSource);
if (sources.Count() > 1)
{
Map(mappingResult, sources.Skip(1).ToArray());
}
return mappingResult;
}
private static void Map(object destination, params object[] sources)
{
if (!sources.Any())
{
return;
}
var destinationType = destination.GetType();
foreach (var source in sources)
{
var sourceType = source.GetType();
Mapper.Map(source, destination, sourceType, destinationType);
}
}
private static T Map<T>(object source) where T : class
{
var destinationType = typeof(T);
var sourceType = source.GetType();
var mappingResult = Mapper.Map(source, sourceType, destinationType);
return mappingResult as T;
}
}
और तब:
var peoplePhoneDto = EntityMapper.Map<PeoplePhoneDto>(people, phone);
लेकिन काफी ईमानदार होने के बावजूद, भले ही मैं पहले से ही कुछ वर्षों से ऑटोमैपर का उपयोग कर रहा हूं, लेकिन मुझे कई स्रोतों से मैपिंग का उपयोग करने की आवश्यकता नहीं है। ऐसे मामलों में जब उदाहरण के लिए मुझे अपने एकल दृश्य मॉडल में कई व्यावसायिक मॉडल की आवश्यकता होती है, मैं बस इन मॉडलों को दृश्य मॉडल वर्ग के भीतर एम्बेड करता हूं।
तो आपके मामले में ऐसा लगेगा:
public class PeoplePhoneDto {
public People People { get; set; }
public Phone Phone { get; set; }
}