Abh*_*eet 1 c# rest pagination odata
我越是研究ODATA上的Microsoft框架,我倾向于认为它不适合企业应用程序.该框架期望将所有数据库直接公开为ViewModel,即使对于像分页和排序这样的简单操作也是如此.
我们将被迫使用强大的机制来保存呈现给JavaScript客户端的页码.
或者我不正确理解微软对OData的影响?
编辑-1:
ODATA V4是一个有状态架构吗?由微软模式团队推动.我没有看到从Asp.Net Web API(REST)迁移到OData(Sounds STATEFUL)架构的任何简单路径.
EDIT-2:分页,排序和分组是来自客户端的传入请求的一部分.
简而言之,MS Odata服务器端实现不是有状态的,它可以被认为是REST架构.
我们将被迫使用强大的机制来保存呈现给JavaScript客户端的页码
您在请求中提供分页信息.例如,如果您想要第2页的10个项目,您将获得前10名并跳过10.
odata-url/?$count=true&$top=10&$skip=10
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,客户端/调用者指定了分页,服务器无需跟踪客户端的状态.
另外,添加$count=true将返回基于结果集中包含的传入过滤器的记录总数(在上面的示例中没有过滤器).这将允许客户端计算有的页数.
该框架期望所有数据库直接暴露为ViewModel ...
也不是真的.你可以返回一个IQueryable<T>地方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
});
}
Run Code Online (Sandbox Code Playgroud)
为了进一步说明这一点,您还可以返回一个硬编码的对象列表,尽管这可能不太可能在生产中.
public IQueryable<SomeEntity> Get() {
return new List<SomeDTO>(){
new SomeDTO(){
Prop1 = 5,
Prop2 = "Hi there"
// etc},
new SomeDTO(){
Prop1 = 6,
Prop2 = "Goodbye"
// etc}
}).AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)
OData的所有选项都有很多资源.我不会在这里包含所有内容,否则我不妨创建第二套文档.
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |