让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了。 OData的特点就是可以根据传入参数动态生成Entity Framework的查询,最终实现动态的SQL的查询。但是在项目有时我们并没有采用Entity Framework,而是采用的NHibernate,那么该怎么用OData呢? 经过一段时间的Google和研究,终于找到了一个好的方案。 在OData API查询时,用户前端是url跟参数,但是在服务器端,我们是接收到的是一个ODataQueryOptions
???ToHql(?ODataQueryOptions?query,??top,??skip)???????{????????????queryString?=??+?query.Context.ElementClrType.Name?+??+?Environment.NewLine;????????????(query.Filter?!=?)???????????{???????????????????????????????=?ToString(query.Filter);???????????????queryString?+=?;???????????}???????????(query.OrderBy!=)???????????{??????????????????????????orderBy?=?ToString(query.OrderBy);?????????????????????????????queryString?+=??orderBy;???????????}???????????top?=?query.Top?.Value????;???????????skip?=?query.Skip?.Value????;????????????queryString;???????}? ODataQueryOptions转换为HQL的项目在这里: Filter和OrderBy属性都会被转换成HQL,然后我们就需要进行NHibernate的查询了。
?QueryResult 对于一般的分页查询来说,我们应该会有两个查询,一个是查询满足条件的数据总条数,另一个是返回当前页的数据集。但是似乎OData并不支持返回这样的数据类型,OData支持的是Entity的List,如果我们重新定义了一个对象QueryResult: [DataContract]?????QueryResult
然后在Controller中返回QueryResult,那么系统就会报406的错误。其实系统给我们提供了一个专门分页返回的对象,我们可以将Service返回的QueryResult封装成PageResult再返回即可。 PageResult里面有个NextPage的URI参数,我们可以传Null。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 单元测试MVC控制器
- azure – 错误System.BadImageFormatException服务结构
- 处理ASP.Net MVC中的过期标题
- ASP.NET MVC与Webforms:替换WebForms控件
- asp.net-mvc – 如何在asp.net中使用Captcha mvc
- asp.net – 回发时超过最大请求长度异常
- 如何使用WCF和自定义ASP.NET成员资格提供程序调试“无法找到
- asp.net :( c#client-side)如何访问页面加载后创建的html元
- Razor 页面简化了 ASP.NET MVC 应用程序
- IIS 8发布ASP.NET核心应用程序 – 正在使用的文件
- asp.net – 有没有办法使用System.Net.Mail.Send
- asp.net-mvc-3 – MvcContrib网格和复选框
- asp.net – 在没有完全回发的情况下,在AJAX更新面
- 在asp.net-mvc中,在不影响其他用户的情况下执行昂
- asp.net – 想要在ModalPopExtender之上显示Upda
- 如何知道asp.net 3.5 sp1和asp.net mvc是否安装在
- 上载ASP.NET MVC Web api控制器中的文件
- asp.net – C#如何在GridView上创建Hyperlink On
- asp.net-mvc – 如何在ASP.Net MVC 3中可选地呈现
- asp.net – 如何获得Google Prettify更像Visual