В приложении Net Core 3.1 я пытаюсь использовать AutoMapper.Extensions.Microsoft.DependencyInjection 7. В решении у меня есть 3 проекта:
- Содержимое (стартовый проект)
- Core
- Entity Framework
После установки nuget, это мой код:
Startup.cs в Content Project:
using AutoMapper;
using Project.Content.EntityFrameWork;
using Project.Content.Dto;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Project.Content
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Auto Mapper Configurations
services.AddAutoMapper(typeof(AutoMapping));
string connectionString = Configuration["ConnectionString:Default"];
services.AddDbContext<ProjectContext>(options =>
options.UseSqlServer(connectionString));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
AutoMapping.cs в проекте Content:
using AutoMapper;
using Project.Content.Core.Domain.Model;
namespace Project.Content.Dto
{
class AutoMapping : Profile
{
public AutoMapping()
{
CreateMap<Exercise, ExerciseDto>();
CreateMap<ExerciseDto, Exercise>();
}
}
}
И это контроллер, на котором я пытаюсь отобразить:
using AutoMapper;
using Project.Content.EntityFrameWork;
using Project.Content.Dto;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Project.Content.Controllers
{
[ApiController]
[Route("/exercise")]
public class ExercisesController : ControllerBase
{
private readonly ILogger<ExercisesController> _logger;
private ProjectContext _dbContext;
private IMapper _mapper;
public ExercisesController(ILogger<ExercisesController> logger, ProjectContext dbContext, IMapper mapper)
{
_logger = logger;
_dbContext = dbContext;
_mapper = mapper;
}
[HttpGet("{id}")]
public ExerciseDto GetById(int id)
{
var exercise = _mapper.Map<ExerciseDto>(_dbContext.Exercises.Where(x => x.Id == id));
return exercise;
}
}
}
В этом контроллере, когда он пытается отобразить объекты он показывает ошибку:
AutoMapper.AutoMapperMappingException: отсутствует конфигурация карты типов или неподдерживаемое отображение.
Типы отображения: EntityQueryable 1 -> ExerciseDto
Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable
1 [[Project.Content.Core.Domain. Model.Exercise, Project.Content.Core, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null]] -> Project.Content.Dto.ExerciseDto в lambda_method (Закрытие, EntityQueryable`1, ExerciseDto, ResolutionContext) в lambda_method ( Закрытие, Объект, Объект, ResolutionContext) в Project.Content.Controllers.ExercisesController.GetById (Int32 id) в C: \ Projects \ Project \ Project.Content \ Project.Content.Service \ Controllers \ ExercisesController.cs: строка 44 в lambda_method (Closure, Object , Object []) в Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute (объектная цель, параметры Object []) в Microsoft.AspNetCore. Mvc .Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute (IActionResultTypeMetutorhopperd, IApperResultTypeMecutor Object [] arguments) в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.InvokeActionMethodAsyn c () в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.Next (состояние и следующее, область видимости и объема, объект и область действия, объект и область, объект и область видимости объекта, объекта ) в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsyn c () --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.Rethrow (контекст ActionExecutedContextSealed) в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.Next (State & next, Scope & scope, Объект и состояние, логическое значение & isCompleted *) в Microsoft.AspNetIn.Core. InvokeInnerFilterAsyn c () --- Конец трассировки стека от предыдущего местоположения, в котором было сгенерировано исключение --- в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.g__Awaited | 19_0 (ResourceInvoker invoker, Task lastTask, State next, Scope) область действия, состояние объекта, логическое значение isCompleted) в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.g__Logged | 17_1 (активатор ResourceInvoker) в Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask | 6_0 конечная точка запроса ILG, конечная точка запроса ILS, конечная точка запроса конечной точки (конечная точка) в Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke (контекст HttpContext) в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext)