AutoMapper no puede convertir TestDbAsyncEnumerable a IQueryable

AutoMapper no puede convertir TestDbAsyncEnumerable a IQueryable

Edita tu TestDbAsyncQueryProvider<>.CreateQuery() para que devuelva el tipo correcto de la expresión pasada por ProjectTo<> .

Aquí está mi ejemplo de implementación.

public IQueryable CreateQuery(Expression expression)
{
    switch (expression)
    {
        case MethodCallExpression m:
            {
                var resultType = m.Method.ReturnType; // it shoud be IQueryable<T>
                var tElement = resultType.GetGenericArguments()[0];
                var queryType = typeof(TestDbAsyncEnumerable<>).MakeGenericType(tElement);
                return (IQueryable)Activator.CreateInstance(queryType, expression);
            }
    }
    return new TestDbAsyncEnumerable<TEntity>(expression);
}

https://gist.github.com/masaedw/95ab972f8181de6bbe48a20ffe9be113

He escrito también prueba unitaria. Está funcionando.

https://github.com/masaedw/AutoMapper/blob/TestDbAsync/src/IntegrationTests/MockedContextTests.cs


Me encontré con este mismo problema, además de la respuesta aceptada, es posible que también tenga la versión genérica de CreateQuery como yo. También lo arreglé así:

public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
    var queryType = typeof(TestDbAsyncEnumerable<>).MakeGenericType(typeof(TElement));
    return (IQueryable<TElement>)Activator.CreateInstance(queryType, expression);
}

TElement proporciona el tipo, por lo que es una implementación más sencilla en la versión genérica.


Recibí este mismo error en mis pruebas después de actualizar de Automapper 6.0.2 a 6.1.1. La degradación a 6.0.2 solucionó el problema.

No estoy seguro si esto es una regresión o un cambio radical en Automapper. No he tenido tiempo de continuar más allá de revisar el registro de cambios y los problemas de github. Nada salta.