AutoMapper失败的原因是什么?

时间:2015-06-19 04:00:29

标签: c# automapper

我认为AutoMapper失败的原因与域模型和视图模型的字段略有不同。 这是域名模型:

public partial class Users
    {
        public int Id { get; set; }
        public string Login { get; set; }
        public string Password { get; set; }
        public int RoleId { get; set; } 
        public virtual UserRoles UserRoles { get; set; }
    }

所以这是视图模型:

 public class UsersViewModel
    {
        public int Id { get; set; }
        [Required]
        [MinLength(3, ErrorMessage = "Минимальная длина логина - 3 символа")]
        [MaxLength(50, ErrorMessage = "Максимальная длина логина - 50 символов")]
        [Display(Name = "Логин")]
        public string Login { get; set; }
        [Required]
        [MinLength(8, ErrorMessage = "Минимальная длина пароля - 8 символов")]
        [MaxLength(50, ErrorMessage = "Максимальная длина пароля - 50 символов")]
        [Display(Name = "Пароль")]
        public string Password { get; set; }
        [Required]
        [Display(Name = "Роль")]
        public int RoleId { get; set; }
        public IEnumerable<SelectListItem> UsrRoles { get; set; }
        public virtual UserRoles UserRoles { get; set; }
    }

此归档public IEnumerable<SelectListItem> UsrRoles { get; set; }可能是AutoMapper失败的原因吗?

我用这种方式调用映射:

public async Task<IEnumerable<UsersViewModel>> GetUsersList()
        {
            var t = new Task<IEnumerable<Users>>(() => _db.Users.ToEnumerable());
            t.Start();          
            await t;
            var vm = Mapper.Map<Task<IEnumerable<Users>>, Task<IEnumerable<UsersViewModel>>>(t);
            return vm.Result.OrderBy(x => x.Login);
        }

2 个答案:

答案 0 :(得分:1)

它失败了,因为您试图将Task Users映射到UsersViewModelpublic async Task<IEnumerable<UsersViewModel>> GetUsersList() { var users = await new Task<IEnumerable<Users>>(() => _db.Users.ToEnumerable()); var vm = Mapper.Map<IEnumerable<Users>, IEnumerable<UsersViewModel>>(users); return vm.Result.OrderBy(x => x.Login); } 。你想要:

await

t.Result将返回任务的结果,这是您想要的,而不是任务本身。

您的另一个选择是调用IEnumerable<Users>,这将返回enUrl='res.iweshow.com' sr = requests.get(enUrl) print(sr) 列表。

答案 1 :(得分:0)

由于shf301,我得到了更好的解决方案。你是对的,我试图映射Task而不是IEnumerable。

\/