小编Dyl*_*sil的帖子

AutoMapper无法将TestDbAsyncEnumerable强制转换为IQueryable

我已经从https://msdn.microsoft.com/en-us/library/dn314429(v=vs.113).aspx实现了TestDbAsync假货,我希望能够使用AutoMapper投影到其他类型之前调用Async EF方法(ToListAsync,CountAsync等).

我在ProjectionExpression.To中得到了一个强制转换异常

抛出异常的示例代码.

_userRepository.GetAll().OrderBy(x => x.Id).ProjectTo<User>.ToListAsync();
Run Code Online (Sandbox Code Playgroud)

这在非测试场景中工作正常,但是当我使用TestDbAsyncEnumerable模拟DbSet时,我得到了

: Unable to cast object of type 'Namespace.TestDbAsyncEnumerable`1[UserEntity]' to type 'System.Linq.IQueryable`1[User]'.
Run Code Online (Sandbox Code Playgroud)

现在为了解决这个问题,我在调用Async EF扩展后必须使用ProjectTo.有没有办法在EF扩展之前保持ProjectTo调用?

参考代码:

public class TestDbAsyncEnumerable<T> : EnumerableQuery<T>, IDbAsyncEnumerable<T>, IQueryable<T>
{
    public TestDbAsyncEnumerable(IEnumerable<T> enumerable)
        : base(enumerable)
    { }

    public TestDbAsyncEnumerable(Expression expression)
        : base(expression)
    { }

    public IDbAsyncEnumerator<T> GetAsyncEnumerator()
    {
        return new TestDbAsyncEnumerator<T>(this.AsEnumerable().GetEnumerator());
    }

    IDbAsyncEnumerator IDbAsyncEnumerable.GetAsyncEnumerator()
    {
        return GetAsyncEnumerator();
    }

    IQueryProvider IQueryable.Provider => new TestDbAsyncQueryProvider<T>(this);
}

public static Mock<DbSet<T>> ToAsyncDbSetMock<T>(this IEnumerable<T> source)
        where T : class
    {

        var data = …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework automapper

12
推荐指数
2
解决办法
950
查看次数

标签 统计

automapper ×1

c# ×1

entity-framework ×1