【发布时间】:2021-04-11 02:42:29
【问题描述】:
我正在开发 Web API,并使用 AutoMapper(10.1.1) 将映射从域模型转换为应用程序模型
我已经在应用层注册了AutoMapper
public static IServiceCollection ConfigureAppServices(this IServiceCollection services)
{
services.AddAutoMapper(Assembly.GetExecutingAssembly());
services.AddMediatR(Assembly.GetExecutingAssembly());
//services.AddMvc().AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<StartUp>())
// services.AddControllersWithViews();
return services;
}
在 Web API startup.cs 中使用了这个类
services.ConfigureAppServices();
我有一个名为 IMapFrom 的通用映射接口
public interface IMapFrom<T>
{
void Mapping(Profile profile) => profile.CreateMap(typeof(T), GetType());
}
映射是从“JobModel”到“JobDetailsDto”
public class JobDetailsDto: IMapFrom<JobModel>
{
public JobDetailsDto()
{
}
public string Id { get; set; }
public string Name { get; set; }
public string JobType { get; set; }
public string ShipBranch { get; set; }
public string ProjectManager { get; set; }
public void Mapping(Profile profile)
{
profile.CreateMap<JobModel, JobDetailsDto>()
.ForMember(d => d.ShipBranch, opt => opt.MapFrom(s => s.PriceBranch))
.ForMember(d => d.ProjectManager, opt => opt.MapFrom(s => s.BidderId));
}
}
JobModel.cs
public class JobModel
{
public JobModel()
{
}
public int Id { get; set; }
public DateTime BidDate { get; set; }
public string JobType { get; set; }
public DateTime CreatedDate { get; set; }
public string City { get; set; }
public string State { get; set; }
public string BidderId { get; set; }
public string PriceBranch { get; set; }
public string Name { get; set; }
}
我正在使用 MediaTr 处理 API 请求
public async Task<JobDetailsDto> Handle(GetJobDetailsQuery request, CancellationToken cancellationToken)
{
var vm = await _context.JobModels
.Where(e => e.Id == request.Id)
.ProjectTo<JobDetailsDto>(_mapper.ConfigurationProvider)
.SingleOrDefaultAsync(cancellationToken);
return vm;
}
当我执行 'GET' 获取 'JobModel' 对象中的数据并转换为 'JobDetailsDto' 时会抛出以下错误
System.InvalidOperationException:缺少从 Domain.Entities.JobModel 到 Application.ApplicationBusiness.Job.Queries.JobDetailsDto 的映射。使用 CreateMap
创建。 在 AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpressionCore(ExpressionRequest 请求,表达式实例参数,IDictionary 2 typePairCount, LetPropertyMaps letPropertyMaps, TypeMap& typeMap) at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest request, IDictionary2 typePairCount,LetPropertyMaps letPropertyMaps) 在 AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest 请求) 在 AutoMapper.Internal.LockingConcurrentDictionary2.<>c__DisplayClass2_1.<.ctor>b__1() at System.Lazy1.ViaFactory(LazyThreadSafetyMode 模式) 在 System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) at System.Lazy1.CreateValue() 在 System.Lazy1.get_Value() at AutoMapper.Internal.LockingConcurrentDictionary2.GetOrAdd(TKey 键) 在 AutoMapper.QueryableExtensions.ExpressionBuilder.GetMapExpression(类型 sourceType,类型 destinationType,对象参数,MemberInfo[] membersToExpand) 在 AutoMapper.QueryableExtensions.ProjectionExpression.ToCore(类型 destinationType,对象参数,IEnumerable1 memberPathsToExpand) at AutoMapper.QueryableExtensions.ProjectionExpression.ToCore[TResult](Object parameters, IEnumerable1 memberPathsToExpand) 在 AutoMapper.QueryableExtensions.ProjectionExpression.To[TResult](对象参数,Expression1[] membersToExpand) at AutoMapper.QueryableExtensions.Extensions.ProjectTo[TDestination](IQueryable source, IConfigurationProvider configuration, Object parameters, Expression1[] membersToExpand) 在 AutoMapper.QueryableExtensions.Extensions.ProjectTo[Tdestination](IQueryable 源,IConfigurationProvider 配置,Expression`1[] membersToExpand)
【问题讨论】:
标签: asp.net-core entity-framework-core automapper automapping