2012-12-03 204 views
36

我想第一次将Automapper引入到应用程序中,但我不断收到错误,说我有一些无效的参数。对象的地图集合

我的模型:

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

阿哇感谢!我试图对此进行投票,但它不会让我,因为我使用stackoverflow更多,我会记得回来并投票给你! 在过去的半个小时里,我一直在窃听我,非常感谢! – EverythingGeek

+2

@ user1873098 welcome :)我开始使用automapper时遇到同样的问题 –

+1

AUTOMAPPER HIZZAA !!! – hanzolo

10

更新! Now you can do this:

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

更新:为了将来的参考,这些被称为[Queryable Extensions](https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions)并包含在automapper中。 –