首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapper投影误差

AutoMapper投影误差
EN

Stack Overflow用户
提问于 2017-01-09 03:57:22
回答 1查看 1.5K关注 0票数 0

我在web中获得了以下方法:

代码语言:javascript
复制
public async Task<IHttpActionResult> Get()
{
   var categories = await _context.Categories.Include(x => x.SubCategories)
                                  .Where(c => c.IsActive)
                                  .ToListAsync();
   var outPut = AutoMapper.Mapper.Map<List<CategoryDto>>(categories);
   return Ok(outPut);
}

此方法正在按预期工作。但是我不想从数据库中检索所有的记录,然后映射到DTO并返回结果,我想使用AutoMapper.QueryableExtensions,只选择所需的字段。

代码语言:javascript
复制
var categories = await _context.Categories.Include(x => x.SubCategories)
                                          .Where(c => c.IsActive)
                                          .ProjectTo<List<CategoryDto>>()
                                          .ToListAsync();

在映射配置中,我定义了映射如下:

代码语言:javascript
复制
public static void Config()
{
    AutoMapper.Mapper.Initialize(config =>
    {
        config.CreateMap<SubCategory, SubCategoryDto>();
        config.CreateMap<Category, CategoryDto>().ForMember(
                    des=>des.SubCategoriesCount,
                    opt=>opt.MapFrom(src=>src.SubCategories.Count));
    });

}

在运行时,我会得到以下异常

“System.Collections.Generic.List1[CategoriesAndBrandsServices.Dtos.CategoryDto]. Create using Mapper.CreateMap<Category, List1>.",”:“从CategoriesAndBrandsServices.Models.Category到CategoriesAndBrandsServices.Models.Category的缺失地图”exceptionType:"System.InvalidOperationException","stackTrace":“应AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest请求,表达式instanceParameter,\r\n在AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest请求下)\r\n在AutoMapper.LockingConcurrentDictionary2.<>c__DisplayClass2_1.<.ctor>b__1()\r\n at System.Lazy1.CreateValue()\r\n at System.Lazy1.LazyInitValue()\r\n at System.Lazy1.get_Value()\r\n在AutoMapper.LockingConcurrentDictionary2.GetOrAdd(TKey key)\r\n at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(Type sourceType, Type destinationType, IDictionary2参数,\r\n在AutoMapper.QueryableExtensions.ProjectionExpression.ToTResult\r\n at AutoMapper.QueryableExtensions.ProjectionExpression.ToTResult\r\n at AutoMapper.QueryableExtensions.Extensions.ProjectToTDestination\r\n at AutoMapper.QueryableExtensions.Extensions.ProjectToTDestination\r\n at CategoriesAndBrandsServices.Controllers.CategoriesController.d0.MoveNext() in c:\OnlineShoppingWebsite\Services\CategoriesAndBrandsServices\CategoriesAndBrandsServices\Controllers\CategoriesController.cs:line 24\r\n--从以前的异常位置开始的堆栈跟踪被抛出)\r\n在堆栈跟踪的System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d\_\_0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n的System.Web.Http.Controllers.ActionFilterResult.d2.MoveNext()\r\n---末端,从以前抛出异常的位置开始r\n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-09 05:43:36

我假设这个项目是一对一的,并且您尝试从一个类别转换到一个类别dtos列表,所以尝试用这个来恢复项目。

代码语言:javascript
复制
.ProjectTo<CategoryDto>()

PS。从异常“从System.Collections.Generic.List1CategoriesAndBrandsServices.Dtos.CategoryDto.到CategoriesAndBrandsServices.Models.Category的缺少映射使用Mapper.CreateMap创建”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41540832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档