gpt4 book ai didi

c# - 使用自动映射器映射异步结果

转载 作者:太空狗 更新时间:2023-10-29 17:30:51 25 4
gpt4 key购买 nike

我们正在创建一个 angularjs 应用程序的 Web.Api 应用程序。 Web.Api 返回一个 json 结果。

第一步是获取数据:

    public List<DataItem>> GetData()
{
return Mapper.Map<List<DataItem>>(dataRepository.GetData());
}

这就像一个魅力。然后我们将数据 repo 设为异步,并更改为代码以使用它。

    public List<DataItem>> GetData()
{
return Mapper.Map<List<DataItem>>(dataRepository.GetDataAsync().Result);
}

仍然没有问题。现在我们想让我的 Web.Api 完全异步,所以我们将其更改为:

    public async Task<List<DataItem>> GetData()
{
return await Mapper.Map<Task<List<DataItem>>>(dataRepository.GetDataAsync());
}

此时 Automapper 感到困惑。首先,我们有以下映射器规则: Mapper.CreateMap();

在 web api 方法变得完全异步之前,这一直有效。异常说它缺少来自

的 map
 Task<ICollection<Data>> to Task<ICollection<DataItem>>.

映射器改为

Mapper.CreateMap<Task<List<Data>>, Task<List<DataItem>>>();

在验证配置时,它会提示无法映射结果。我们应该如何配置映射?

最佳答案

您需要将异步数据提取移出 Map 调用:

var data = await dataRepository.GetDataAsync();
return Mapper.Map<List<DataItem>>(data);

或者,您可以使用 AutoMapper LINQ 投影:

var data = await dbContext.Data.ProjectTo<DataItem>().ToListAsync();

我不知道你的存储库是否直接公开了 IQueryable(我们不使用存储库)。现在,我们的应用几乎完全使用第二个版本。

关于c# - 使用自动映射器映射异步结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com