and*_*chy 7 linq nhibernate asp.net-mvc odata asp.net-web-api
我在VS 2012中创建了一个WebApi项目,使用NHibernate作为我的ORM,我打算在其上启用Odata支持.所以我用一个Get方法创建了一个测试控制器,它从我的数据库中的表中返回一个实体列表.
一切正常,我可以使用OData过滤和排序我的结果等.问题是我找不到一种方法来限制从数据库返回到控制器的数据量,这个表有数百万条记录在里面.
使用PageSize属性的Queryable属性似乎只是限制返回给客户端的数据量,但没有从数据库返回的数据量.
我试着应用Take(n)在IQueryable返回之前里面的GET方法,它限制了结果从DB带回,但它打破了OData的过滤,因为如果你尝试查询,这不是在第n个结果的实体,它只返回一个空集合.
我知道你可以使用$TopOData上的参数来实现这一目标,但我不想依赖提供它的客户端/消费者,以确保我不会不必要地带来数千甚至数百万条我不会去的记录使用.
我还尝试手动检查客户端是否在查询字符串上提供了Top参数,将OData转换应用于我的Queryable,然后将该Take(n)方法应用于转换后的查询.这种方法使我能够通过OData过滤任何实体,但它打破了分页,因为如果我使用$Skip=n参数,它会再次返回一个空集合.
那么,有没有办法可靠地限制从DB中获取的结果而不破坏OData支持?
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |