简而言之,MS Odata 服务器端实现是not有状态,可以认为是 REST 架构。
我们将被迫使用优雅的机制来保存呈现给 JavaScript 客户端的页码
您在请求中提供寻呼信息。例如,如果您想要第 2 页的 10 项,您将选取前 10 项并跳过 10 项。
odata-url/?$count=true&$top=10&$skip=10
正如您所看到的,客户端/调用者指定寻呼,服务器不需要跟踪客户端的状态。
还添加$count=true
将根据结果集中包含的传入过滤器返回记录总数(在上面的示例中没有过滤器)。这将允许客户端计算有页数。
该框架期望所有数据库直接公开为 ViewModel...
也不是真的。您可以返回一个IQueryable<T>
where T
是你的类型。T
不一定是 EF 模型。例如,从 a 返回以下内容DbContext
是可以接受的。
public IQueryable<SomeEntity> Get() {
return dbContext.SomeEntities
.Where(x => optionalPreFiltereExpression)
.Select(x => new SomeDTO(){
Prop1 = x.Prop1,
Collection1 = x.CollectionOfInterest,
// etc
});
}
为了进一步说明这一点,您还可以返回硬编码的对象列表,尽管这在生产中可能不太可能。
public IQueryable<SomeEntity> Get() {
return new List<SomeDTO>(){
new SomeDTO(){
Prop1 = 5,
Prop2 = "Hi there"
// etc},
new SomeDTO(){
Prop1 = 6,
Prop2 = "Goodbye"
// etc}
}).AsQueryable();
}
有关 OData 的所有选项的许多资源。我不会在这里包含所有内容,否则我可能只是创建第二组文档。
- 支持 ASP.NET Web API 中的 OData 查询选项 https://learn.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options
- odata.org - 入门 http://www.odata.org/getting-started/
- 使用 ASP.NET Web API 2.2 创建 OData v4 端点 https://learn.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint
- odata.org - OData 版本 4.0。第1部分 http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html