2012-12-03 14 views
36

मैं पहली बार ऑटोमैपर को एप्लिकेशन में पेश करने का प्रयास कर रहा हूं, लेकिन मुझे यह कहते हुए एक त्रुटि मिल रही है कि मेरे पास कुछ अमान्य तर्क हैं।ऑब्जेक्ट्स का मानचित्र संग्रह

मेरे मॉडल:

namespace StoreGradesLib.Models 
{ 
    public class Store 
    { 
     [Key] 
     public int StoreID { get; set; } 

     [Required] 
     [MaxLength(120)] 
     public string StoreName { get; set; } 

     [Required] 
     [MaxLength(20)] 
     public string StoreNumber { get; set; } 

     [Required] 
     [MaxLength(120)] 
     public string ManagerName { get; set; } 

     [Required] 
     public long PhoneNumber { get; set; } 

     [Required] 
     public string AddressLine1 { get; set; } 

     public string AddressLine2 { get; set; } 

     [Required] 
     public string Postcode { get; set; } 

     [Required] 
     public int WallArea { get; set; } 

     [Required] 
     public int FloorArea { get; set; } 

     [Required] 
     public int NumWindows { get; set; } 

     [Required] 
     public int NumDesks { get; set; } 

     [Required] 
     public int NumDoors { get; set; } 

     [Required] 
     public int StoreGradeID { get; set; } 

     [Required] 
     public bool Active { get; set; } 

     public virtual StoreGrade StoreGrade { get; set; } 

     [Timestamp] 
     public Byte[] Timestamp { get; set; } 
    } 
} 

मेरे देखें मॉडल:

namespace StoreGradesLib.ViewModels 
{ 
    public class StoreVM 
    { 
     public int StoreID { get; set; } 
     public bool Active { get; set; } 
     public Byte[] Timestamp { get; set; } 

     [Required(ErrorMessage = "Store Name is required.")] 
     [Display(Name = "Store Name")] 
     public string StoreName { get; set; } 

     [Required(ErrorMessage = "Store Number is required")] 
     public string StoreNumber { get; set; } 

     [Required(ErrorMessage = "Store Manager is required.")] 
     [Display(Name = "Manager Name")] 
     public string ManagerName { get; set; } 

     [Required(ErrorMessage = "Contact Number is required.")] 
     [Display(Name = "Phone Number")] 
     public int PhoneNumber { get; set; } 

     [Required(ErrorMessage = "Address Line 1 is required.")] 
     [Display(Name = "Address Line 1")] 
     public string AddressLine1 { get; set; } 

     [Display(Name = "Address Line 2")] 
     public string AddressLine2 { get; set; } 

     [Required(ErrorMessage = "Postcode is required.")] 
     public string Postcode { get; set; } 

     [Required(ErrorMessage = "Must input wall area.")] 
     [Display(Name = "Wall Area")] 
     public int WallArea { get; set; } 

     [Required(ErrorMessage = "Must input floor area.")] 
     [Display(Name = "Floor Area")] 
     public int FloorArea { get; set; } 

     [Required(ErrorMessage = "Must input number of windows.")] 
     [Display(Name = "Windows")] 
     public int NumWindows { get; set; } 

     [Required(ErrorMessage = "Must input number of desks.")] 
     [Display(Name = "Desks")] 
     public int NumDesks { get; set; } 

     [Required(ErrorMessage = "Must input number of doors.")] 
     [Display(Name = "Doors")] 
     public int NumDoors { get; set; } 

     [Required(ErrorMessage = "Store must have a grade.")] 
     public StoreGrade StoreGradeID { get; set; } 

     public string Address 
     { 
      get 
      { 
       return StoreName + " " + AddressLine1 + " " + AddressLine2 + " " +     Postcode; 
      } 
     } 
    } 
} 

बनाया मैपिंग:

CreateMap<Store, StoreVM>(); 
CreateMap<StoreVM, Store>(); 

मेरी नियंत्रक के भीतर, मैं storeVM को स्टोर के चयन मैप करने के लिए कोशिश कर रहा हूँ । मैं वर्तमान में अपने स्टोर प्राप्त कर रहा हूं;

var stores = db.Store.Include(s => s.StoreGrade); 
stores = from s in db.Store.Where(s => s.Active.Equals(true)) 
       select s; 

मैं StoreVM को दुकानों के चयन को मैप करने के लिए इच्छुक हूँ, मैं निम्नलिखित की कोशिश की है, लेकिन मैं गलत मापदंडों चेतावनी मिलती है,

var VMstores = Mapper.Map<Store, StoreVM>(stores); 

मैं त्रुटि मिल रही है कि सबसे अच्छा अतिभारित विधि मैच में कुछ अमान्य तर्क हैं।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

उत्तर

90

आप मानचित्रण कर रहे हैं संग्रह, नहीं एकल संस्थाओं (IEnumerable<Store>IEnumerable<StoreVM> करने के लिए), तो यह मानचित्रण

var VMstores = Mapper.Map<IEnumerable<Store>, IEnumerable<StoreVM>>(stores); 
+3

आह वाह धन्यवाद! मैंने इसे वोट देने की कोशिश की लेकिन यह मुझे नहीं जाने देगा, क्योंकि मैं स्टैक ओवरफ्लो का उपयोग करता हूं, मुझे वापस आना और आपको वोट देना याद रखना होगा! पिछले आधे घंटे के लिए मुझे परेशान कर रहा था, बहुत बहुत धन्यवाद! – EverythingGeek

+2

@ user1873098 आपका स्वागत है :) ऑटोमैपर –

+1

ऑटोमैपर HIZZAA का उपयोग शुरू करने के दौरान मुझे एक ही समस्या थी !!! – hanzolo

10

अद्यतन का उपयोग करें! Now you can do this:

var VMstores = stores.Project().To<StoreVM>(); 
+0

अद्यतन: भविष्य के संदर्भ के लिए इन्हें [क्वेरी करने योग्य एक्सटेंशन] कहा जाता है (https://github.com/AutoMapper/AutoMapper/wiki/Queryable- एक्सटेंशन) और automapper में शामिल हैं। –

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