剖析ADO.NET數據服務框架
ADO.NET數據服務框架還是比較常用的,于是我研究了一下ADO.NET數據服務框架,在這里拿出來和大家分享一下,希望對大家有用。在需要業(yè)務邏輯的情況下(例如實現驗證邏輯或安全時),可以使用服務操作。服務操作允許開發(fā)人員在 URI 標識的服務器(類似于其他 ADO.NET 數據服務資源)上定義一個方法。這些服務操作是一些添加到派生自表示數據服務的 DataService 的類的方法。
ADO.NET數據服務框架之創(chuàng)建服務操作
若要實現服務操作,請將一個公共實例方法定義為派生自表示數據服務的 DataService 類的數據服務類的一部分。
◆此方法只能接受 [in] 參數。
◆如果對參數進行定義,則每個參數的類型必須為基元類型。
◆此方法必須返回 void、IEnumerable
◆T 必須為一個類,此類表示數據服務將公開的數據模型中的某個實體類型。
◆若要支持查詢選項(如排序、分頁和篩選),服務操作方法應返回 IQueryable
◆必須用 [WebGet] 或 [WebInvoke] 屬性為此方法添加批注。
◆[WebGet] 使您能夠通過使用 GET 請求調用此方法。
◆[WebInvoke] 使您能夠通過使用 PUT、POST 或 DELETE 請求調用此方法。
#T#可以用 SingleResultAttribute 為服務操作添加批注,指定此方法的返回值是一個實體而不是一個實體集。這一區(qū)別確定了生成的響應序列化。例如,當使用 AtomPub 序列化時,單個資源類型實例將表示為一個 entry 元素,而單個實例集將表示為一個 feed 元素。如果某個方法未遵循上面定義的約定,則不會將此方法公開為數據服務中的服務操作。對服務操作進行尋址。
根據 ADO.NET 數據服務協(xié)議規(guī)范,可通過將方法的名稱放置到 URI 的***個路徑段中來對服務操作進行尋址??梢詫⑵渌窂蕉位虿樵冞x項添加到此 URI,具體取決于服務操作的返回類型。下面的示例對公開基于實體框架的模型的數據服務實現服務操作。
- public class Northwind :
- DataService<NorthwindModel.NorthwindEntities>
- {
- public static void InitializeService(IDataServiceConfiguration config)
- {
- // Entity sets access configuration.
- config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
- // Service operations access configuration.
- config.SetServiceOperationAccessRule("OrdersByCity",
- ServiceOperationRights.All);
- }
- [WebGet]
- public IQueryable<Orders> OrdersByCity(string city)
- {
- if (string.IsNullOrEmpty(city))
- {
- throw new ArgumentNullException("city",
- "You must provide a city name argument");
- }
- return this.CurrentDataSource.Orders.Where(
- "it.ShipCity = @city",
- new ObjectParameter("city", city));
- }
- }