【发布时间】: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