我认为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);
}
答案 0 :(得分:1)
它失败了,因为您试图将Task
Users
映射到UsersViewModel
到public 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。
\/