Я использую AutoQueryable от Thibaut Renoncourt вместе с AutoMapper.И все работает отлично, пока я не попытаюсь использовать automapper для отправки DTO обратно клиенту.
Так что приведенный ниже код прекрасно работает:
[AutoQueryable]
public IQueryable<DatabaseClassName> Get([FromServices] IQueryableRepository repository)
{
return repository.GetIQueryable<DatabaseClassName>();
}
Однако этот код не работает:
[AutoQueryable]
public IQueryable<ViewModel> Get([FromServices] IQueryableRepository repository)
{
return repository.GetIQueryable<DatabaseClassName>().UseAsDataSource(_mapper).For<ViewModel>();
}
В моем классе профиля Mapper я настроил его следующим образом:
public class MapperProfile : Profile
{
public MapperProfile()
{
CreateMap<DatabaseClassName, ViewModel>().ReverseMap();
//CreateMap(typeof(Source<>), typeof(Destination<>)).ReverseMap();
}
}
в моем классе запуска (метод ConfigureServices), который я поместил в:
services.AddAutoMapper();
Ошибка выглядит следующим образом:
System.RuntimeType.GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
System.Type.GetProperty(string name, BindingFlags bindingAttr)
System.Reflection.TypeExtensions.GetProperty(Type type, string name, BindingFlags bindingAttr)
AutoQueryable.Helpers.SelectHelper.GetMemberExpression<TEntity>(Expression parent, SelectColumn column, IAutoQueryableProfile profile, bool isLambdaBody)
AutoQueryable.Helpers.SelectHelper.InitType<TEntity>(IEnumerable<SelectColumn> columns, Expression node, IAutoQueryableProfile profile)
AutoQueryable.Helpers.SelectHelper.GetSelector<TEntity, TResult>(ICollection<SelectColumn> selectColumns, IAutoQueryableProfile profile)
AutoQueryable.Core.Models.AutoQueryHandler.GetDefaultSelectableQuery<T>(IQueryable<T> query)
AutoQueryable.Core.Models.AutoQueryHandler.GetAutoQuery<T>(IQueryable<T> query)
AutoQueryable.Core.Models.AutoQueryableContext.GetAutoQuery<T>(IQueryable<T> query)
System.Dynamic.UpdateDelegates.UpdateAndExecute2<T0, T1, TRet>(CallSite site, T0 arg0, T1 arg1)
AutoQueryable.AspNetCore.Filter.FilterAttributes.AutoQueryableFilter.OnActionExecuted(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Мне было любопытно, есть ли у кого-нибудь какие-либо предложения по исправлению этой проблемы.