2012-12-03 15 views
36

Ich versuche, Automapper zum ersten Mal in eine Anwendung einzuführen, aber ich bekomme immer einen Fehler, der besagt, dass ich einige ungültige Argumente habe.Map Sammlung von Objekten

Mein Modell:

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; } 
    } 
} 

My View Modell:

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; 
      } 
     } 
    } 
} 

Erstellt Zuordnungen:

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

In meinem Controller, Ich versuche, eine Auswahl an Geschäften zu storeVM zur Karte . Ich erhalte derzeit meine Geschäfte als so;

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

ich die Auswahl an Geschäfte zu StoreVM abzubilden bin zu wollen, habe ich folgendes probiert, aber ich erhalte eine ungültige Parameter Warnung,

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

ich den Fehler erhalte, dass die besten überladene Methode Übereinstimmung hat einige ungültige Argumente.

Kann mir jemand in die richtige Richtung zeigen?

Antwort

90

Sie kartieren Sammlungen, nicht einzelne Einheiten (IEnumerable<Store> zu IEnumerable<StoreVM>), so diese Zuordnung

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

Ah wow Dank! Ich habe versucht, dies zu wählen, aber es wird mich nicht lassen, da ich stackoverflow mehr benutze, werde ich daran denken, zurück zu kommen und dich zu wählen! Haben mich in der letzten halben Stunde nervtot, vielen Dank! – EverythingGeek

+2

@ user1873098 welcome :) Ich hatte die gleichen Probleme, als ich begann, Autoadapter zu verwenden –

+1

AUTOMAPPER HIZZAA !!! – hanzolo

10

Update verwenden! Now you can do this:

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

Update: Für zukünftige Referenz heißen diese [Queryable Extensions] (https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions) und sind in AutoMapper enthalten. –

Verwandte Themen