我正在处理一个需要使用异步编程C#的项目。我在Model和ViewModel之间使用Automapper进行映射。对于异步数据,我创建了一个map方法,如下所示:
public static async Task<IEnumerable<PersonView>> ModelToViewModelCollectionAsync(this Task<IEnumerable<Person>> persons)
{
return await Mapper.Map<Task<IEnumerable<Person>>, Task<IEnumerable<PersonView>>>(persons);
}
我将此映射方法称为如下(在我的服务类中):
public async Task<IEnumerable<PersonView>> GetAllAsync()
{
return await _personRepository.GetAllAsync("DisplayAll").ModelToViewModelCollectionAsync();
}
最后我在控制器内调用了我的服务类。
public async Task<ActionResult> Index()
{
return View(await PersonFacade.GetAllAsync());
}
但是当我运行我的项目时,它会向我显示异常
Missing type map configuration or unsupported mapping.
Mapping types:
Task`1 -> Task`1
System.Threading.Tasks.Task`1[[System.Collections.Generic.IEnumerable`1[[PF.Model.Person, PF.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] -> System.Threading.Tasks.Task`1[[System.Collections.Generic.IEnumerable`1[[PF.Services.ViewModel.PersonView, PF.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Destination path:
Task`1
Source value:
System.Threading.Tasks.Task`1[System.Collections.Generic.IEnumerable`1[PF.Model.Person]]
根据我的项目架构,不可能避免使用自动播放器。
注意:我的getall存储库方法如下:
public virtual async Task<IEnumerable<T>> GetAllAsync(string storedProcedure)
{
return await _conn.QueryAsync<T>(storedProcedure);
}
答案 0 :(得分:1)
解决了这个问题。我在这里应用了一点点技巧。我没有在服务层创建Async的扩展方法,而是按如下方式编写了我的代码:
public async Task<IEnumerable<PersonView>> GetAllAsync()
{
var persons = await _personRepository.GetAllAsync("DisplayAll");
var personList = PersonExtension.ModelToViewModelCollection(persons);
return personList;
}
剩下的都没有变化。
现在它工作正常。