【问题标题】:Map collection of objects对象的地图集合
【发布时间】:2012-11-21 03:42:12
【问题描述】:

我第一次尝试将 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);

我收到最佳重载方法匹配有一些无效参数的错误。

谁能指出我正确的方向?

【问题讨论】:

    标签: c# entity-framework automapper


    【解决方案1】:

    您正在映射集合,而不是单个实体(IEnumerable&lt;Store&gt;IEnumerable&lt;StoreVM&gt;),因此请使用此映射

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

    【讨论】:

    • 哇,谢谢!我试图投票,但它不会让我,当我更多地使用stackoverflow时,我会记得回来投票给你!过去半小时一直在烦我,非常感谢!
    • @user1873098 欢迎 :) 我在开始使用 automapper 时遇到了同样的问题
    • 我投票支持这个答案,但文档不是说这应该适用于列表、IList 等吗?我对这些类型有同样的问题automapper.codeplex.com/wikipage?title=Lists+and+Arrays
    • var VMstores = Mapper.Map&lt;IEnumerable&lt;StoreVM&gt;&gt;(stores); 使用第一个重载(更短的语法)而不是第三个重载(更长的语法)。
    • 需要一个映射器,我在帖子的版本中建议了它。
    【解决方案2】:

    更新! Now you can do this:

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

    【讨论】:

    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多