将异步模型集合映射到异步视图模型集合

本文关键字:模型 集合 异步 视图 映射 | 更新日期: 2023-09-27 18:13:25

我正在与一个项目,我需要与c#异步编程工作。我使用Automapper模型和ViewModel之间的地图。对于异步数据,我创建了如下的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]]

根据我的项目架构,不可能避免automapper。

注意:我的仓库getall方法如下:

public virtual async Task<IEnumerable<T>> GetAllAsync(string storedProcedure)
{
    return await _conn.QueryAsync<T>(storedProcedure);
}

将异步模型集合映射到异步视图模型集合

已解决。我在这里应用了一点小技巧。我没有在服务层为Async创建扩展方法,而是这样写代码:

public async Task<IEnumerable<PersonView>> GetAllAsync()
        {
            var persons = await _personRepository.GetAllAsync("DisplayAll");
            var personList = PersonExtension.ModelToViewModelCollection(persons);
            return personList;
        }

其余均不变