[转]WCF Data Services OData
http://martinwilley.com/net/data/wcfds.html
WCF Data Services
About
Formerly "Astoria" and "ADO.Net Data Services", this is the .Net ODATA implementation - ODATA being RESTful HTTP/JSON/ATOM xml access to databases.
OData
HTTP verbs: GET is get, POST is insert, PUT is update, MERGE is partial update, DELETE is delete
NB: PUT,MERGE and DELETE may be blocked by proxies/firewalls, so add the X-HTTP-Method header can be added to a POST request
- Use http://localhost/wcfds.svc/$metadata to get metadata (like ?wsdl)
- http://localhost/wcfds.svc/customers('ALFKI')
get by primary key - http://localhost/wcfds.svc/customers/$count
- http://localhost/wcfds.svc/customers?$orderby=Price desc
- http://localhost/wcfds.svc/customers?$skip=20&$top=5
- http://localhost/wcfds.svc/customers?$filter= Name eq 'Bill' and Price gt 10
- http://localhost/wcfds.svc/customers?$filter= startswith(name, 'B') and year(Date) gt 2011 and round(Price) = 5
- http://localhost/wcfds.svc/customers?$expand=Orders/Order_Details
Eager loading
Server code
Reference System.Data.Services.Client.dll. The VS2010 item template for the endpoint is "WCF Data Service". The svc code behind is a DataService<T> with a static InitializeService() method which should expose a IQueryable<T> getter.
DataService<T> can be an Entity Framework ObjectContext, which exposes the ObjectSets (tables).
For custom classes that are exposed, add a [DataServiceKeyAttribute(pk)] to the class to denote the primary key (for http://localhost/wcfds.svc/custom('ALFKI') gets). For POCOs, add [DataContract(IsReference=true)] so properties are serialized as objects, not values (i.e. product.Category refers to a Category object).
Security
You can secure with the standard IIS/web.config settings including Windows, asp.net forms etc.
In the client library, you can set context.Credentials = new NetworkCredential(username, password) or use the context.SendingRequest event to set request headers such as Authorization.
In server InitializeService, configure SetEntitySetAccessRules
Service Operations
In InitializeService, config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); as applicable/
Expose sprocs as service operations: [WebGet]/[WebInvoke] methods- input parameters must be primitives, return must be primitive or IEnumerables/IQueryable.
Client
Adding a service reference to an ODATA service creates a proxy derived from DataServiceContext which looks like a normal EF ObjectContext. (MSDN concepts)
- context.SaveChanges(SaveChangesOption.Batch) will batch changes (also: ContinueOnError, ReplaceOnUpdate)
Catch DataServiceQueryException, DataServiceRequestException - It uses ATOM - to use JSON, use a WebClient with client.Headers["Accept"] = "application/json"
- In a partial class, add [QueryInterceptor("Customers")]public Expression... OnQueryCustomers()
- [ChangeInterceptor("Customers")] can also be used for validation (or subscribe to regular EntityChanging event)
For data-binding, wrap the objectsets in DataServiceCollection which extends ObservableCollection.
Queries
- The entity collections (ObjectSets in EF) are DataServiceQuery<T> but otherwise it's mostly normal IQueryable
- Eager load (ODATA $expand) with context.Orders.Expand("Order_Details")
- Explicit load (lazy load) with context.LoadProperty(order, "Order_Details")
- Explicitly executing the query returns a QueryOperationResponse.
When paging, this has a GetContinuation property which includes the url of the next page
NB: you must iterate the query result to use the continuation
[转]WCF Data Services OData的更多相关文章
- 为 Oracle Database 开发 WCF Data Services 和 OData 应用程序
为 Oracle Database 开发 WCF Data Services 和 OData 应用程序 本教程包含以下部分: 目的 所需时间 概述 先决条件 创建新的网站项目 ...
- WCF Data Services 5.0 for OData V3
https://www.microsoft.com/en-us/download/details.aspx?id=29306 VS 2010 下 安装 WCF Data Services 5.0 en ...
- [转]Consuming a OData Service in a Client Application (WCF Data Services)
本文转自:https://msdn.microsoft.com/zh-tw/library/dd728282(v=vs.103).aspx WCF Data Services 5.0 其他版本 ...
- [转]访问 OData 服务 (WCF Data Services)
本文转自:http://msdn.microsoft.com/zh-SG/library/dd728283(v=vs.103) WCF 数据服务 支持开放式数据协议 (OData) 将数据作为包含可通 ...
- 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性
[索引页][源码下载] 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性 作者:weba ...
- 【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】
今天做了一个demo, EF+Data Services 先建立一个网站项目 添加一个ADO.NET 数据模型 相当于一个EF容器,用来连接MSSQL数据库 添加一个WCF Data Services ...
- WCF Data Service 使用小结 (一)—— 了解OData协议
最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...
- WCF Data Service 使用小结 —— 了解OData(一)
最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...
- WCF Data Service 使用小结(二) —— 使用WCF Data Service 创建OData服务
在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主要说明在.NET的环境下,如何使用 WCF Data Se ...
随机推荐
- 八.jQuery源码解析之get()
理论上get是用来返回jQuery对象中部分或全部元素为数组的,但是转换为数组后, 数组中的单个元素又是一个一个dom元素.所以get还有另外一个功效,就是将jQuery对象转换成dom对象. 如果g ...
- 记一次全站升级https引发的一系列问题
中秋假期,闲来无事.花了一下午折腾了下https,说实话这年头还有网站不上https显然是折腾精神不够啊~ 1.SSL证书评估 看了市面上各种类型的证书,有收费的也有免费的,但是最终还是选择了腾讯云提 ...
- 项目管理工具maven(二)
2 整合ssh框架 2.1 依赖传递 只添加了一个struts2-core依赖,发现项目中出现了很多jar, 这种情况 叫 依赖传递 2.2 依赖版本冲突的解决 1. 第一声明优先原则 <dep ...
- Go语言环境安装详细介绍
工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...
- linux下mysql的安装配置
http://blog.csdn.net/xiagege3/article/details/41852895 (实战用的此文,要求mysql源码必须是未编译的,需依赖cmake编译) http:/ ...
- sql日志
这个像线程输出一样,并不是顺序的,主要靠线程名称来看.比如我13线程执行了一条语句. 第一条:蓝字那条就是我执行的语句. 第二条:368,thread-13那条就是我的参数. 第三条:369,thre ...
- leetcode58
public class Solution { public int LengthOfLastWord(string s) { s = s.Trim(); || s.Trim().Length == ...
- Microsoft Office Professional Plus 2013全套
Microsoft Office Professional Plus 2013全套产品,全激活版本 包括Access Word Excel Powerpoint Publisher Skyd ...
- nodepad++快捷键
在用notepad++进行代码编辑的过程中,其实notepad++也可以进行单行.多行.区块注释和取消注释的....... 快捷键如下: 单行.多行注释 //方式 ...
- javascript常用验证大全
1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert("不能超过50个字符 ...