我正在使用以下内容:
- EntityFrameworkCore 3.1.2
- .Net标准库2.1
- Automapper 9.0.0
- Automapper.Extension.microsoft.DependencyInjection 7.0.0
我的AutoMapper DI如下所示:
services.AddAutoMapper(Assembly.GetExecutingAssembly());
我有一个默认实施的IMapFrom:
using AutoMapper;
namespace Application.Common.Mappings
{
public interface IMapFrom<T>
{
void Mapping(Profile profile) => profile.CreateMap(typeof(T),GetType());
}
}
我有一个DTO类,如下所示:
public class ServiceRegistrationDto : IMapFrom<ServiceRegistration>
{
public string ServiceName { get; set; }
public string MessageType { get; set; }
public string ServiceURL { get; set; }
public void Mapping(Profile profile)
{
profile.CreateMap<ServiceRegistration,ServiceRegistrationDto>();
}
}
在处理程序中,我正在执行以下操作:
public async Task<ServiceRegistrationViewModel> Handle(GetServiceRegistrationListQuery request,CancellationToken cancellationToken)
{
var serviceRegistrations = await _context.ServiceRegistrations
.Where(s => s.MessageType.Equals(request.MessageType,StringComparison.invariantcultureIgnoreCase))
.ProjectTo<ServiceRegistrationDto>(_mapper.ConfigurationProvider)
.ToListAsync(cancellationToken);
return null;
}
问题在于“ ProjectTo”不是IQueryable的定义。我的印象是Automapper具有Queryable Extensions。我是否缺少NuGet软件包?我正在按照Northwind Traders的示例进行操作,但无法弄清自己有什么不同。
我可以像这样使用IMapper进入“ ProjectTo”:
var x = _mapper.ProjectTo<ServiceRegistrationDto>(serviceRegistrations);
但是我希望像您应该的那样将它作为IQueryable的一部分来做。