【问题标题】:The provider for the source IQueryable doesn't implement IDbAsyncQueryProvider源 IQueryable 的提供程序未实现 IDbAsyncQueryProvider
【发布时间】:2017-07-14 13:28:50
【问题描述】:

我打算使用以下示例在我的 api 上创建分页:https://www.codeproject.com/Articles/1073488/Paging-in-ASP-NET-Web-API 我已经实现了所有代码并运行它,直到我点击以下代码行:

var results = await projection.ToListAsync();

然后它会导致运行时错误:

“源 IQueryable 的提供程序没有实现 IDbAsyncQueryProvider...”

我研究了这个错误并尝试在我的 Global.asax.cs 文件中初始化 Mapper,如下所示:

        protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        Mapper.Initialize(cfg => cfg.CreateMap<Logging.Models.LogsModel, Log>());
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    }

这并不能解决问题,有人知道我在初始化 Automapper 时做错了什么吗?

提前致谢。

这是我的控制器中的实现代码:

        public async Task<IHttpActionResult> Get(int? page = null, int pageSize = 10, string orderBy = nameof(LogsModel.Id), bool ascending = true)
    {
        if (page == null)
        {
            return Ok(_repository.GetLogs());
        }
        else
        {
            var returnList =  _repository.GetLogs().AsQueryable();
            returnList = returnList as IQueryable<LogsModel>;
            var logsout = await CreatePagedResults<LogsModel, Log>(returnList, page.Value, pageSize, orderBy, ascending);
            return Ok(logsout);
        }
    }

这里是GetLogs的定义:

        public IEnumerable<LogsModel> GetLogs()
    {
        List<LogsModel> logs = Logs.ToList<LogsModel>();
        return logs;
    }

【问题讨论】:

  • 你这里的数据源是什么? global.asax.cs 文件根本不相关。
  • 旁注:您也可以使用asp.net webapi implementation of OData 来实现分页、过滤和排序,而无需编写任何实现代码。客户端将负责发送包含它想要检索的内容的正确查询字符串。 c# 代码将严格关注业务模型。
  • 实体框架6.1.3 ---> Sql Server
  • 在您的情况下,IQueryable 的具体类型是什么?
  • SQL Server 的IQueryable 确实支持IDbAsyncQueryProvider,所以无论您从GetLogs() 返回什么,都必须是别的东西。很可能问题出在GetLogs

标签: c# asp.net asp.net-web-api automapper


【解决方案1】:

我遇到了类似的问题,问题是我使用 System.Data.Entity 而不是 Microsoft.EntityFrameworkCore

我刚换了:

使用 System.Data.Entity;和 使用 Microsoft.EntityFrameworkCore;

因为两个命名空间具有相同的方法,例如 SingleOrDefaulAsync,但在 System.Data.Entity 中,此方法具有 InvalidOperationException 源不实现 IDbAsyncQueryProvider 在这里查看更多https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.queryableextensions.singleordefaultasync?view=entity-framework-6.2.0#System_Data_Entity_QueryableExtensions_SingleOrDefaultAsync__1_System_Linq_IQueryable___0__System_Linq_Expressions_Expression_System_Func___0_System_Boolean___System_Threading_CancellationToken_

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 2021-12-09
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多