瞬間明白ADO.NET數(shù)據(jù)服務(wù)是怎么回事
ADO.NET還是比較常用的,于是我研究了一下ADO.NET數(shù)據(jù)服務(wù),在這里拿出來和大家分享一下,希望對大家有用。ADO.NET數(shù)據(jù)服務(wù)框架支持具象狀態(tài)傳輸 (REST) 語義以外的功能。例如,服務(wù)操作和偵聽器可用于將驗證邏輯或安全過程添加到查詢和更新中。可以使用 ADO.NET 數(shù)據(jù)服務(wù)定義的標(biāo)準(zhǔn)語法寫入服務(wù)操作以對輸出進(jìn)行篩選或排序。以上示例的查詢字符串中使用了排序語法,其中的 $orderby 和 $top 運算符應(yīng)用于操作結(jié)果。
利用偵聽器可以將自定義應(yīng)用程序邏輯插入到數(shù)據(jù)服務(wù)的請求或響應(yīng)過程中。必須為由數(shù)據(jù)服務(wù)公開的給定實體集顯式注冊偵聽器方法。在指定的實體集上執(zhí)行查詢、插入、更新或刪除操作時,將調(diào)用相應(yīng)的偵聽器。然后,偵聽器可能會更改數(shù)據(jù)、執(zhí)行授權(quán)策略或者甚至終止操作。
#T#ADO.NET數(shù)據(jù)服務(wù)也支持由關(guān)系數(shù)據(jù)庫管理系統(tǒng)實現(xiàn)的存儲過程。實體數(shù)據(jù)模型 支持將數(shù)據(jù)檢索和修改映射到存儲過程。ADO.NET 數(shù)據(jù)服務(wù)對此功能進(jìn)行了改編。服務(wù)操作的服務(wù)范圍可見性由某個方法控制,其方式與實體集可見性的控制方式大致相同。例如,若要使上述示例中的 CustomersByCity 方法可供訪問,請將下圖中的代碼添加到派生自 DataService 的類。
- public class Northwind : DataService<NorthwindEntities>
- {
- public static void InitializeService(
- IDataServiceConfiguration config)
- {
- config.SetServiceOperationAccessRule("CustomersByCity",
- ServiceOperationRights.All);
- }
- [WebGet]
- public IQueryable<Customer> CustomersByCity(string city)
- {…
- }
- }
偵聽器
利用 ADO.NET數(shù)據(jù)服務(wù),數(shù)據(jù)服務(wù)開發(fā)人員能夠截獲請求/響應(yīng)管道并注入自定義驗證邏輯。在 ADO.NET數(shù)據(jù)服務(wù)中,偵聽器具有兩大作用:使您能夠向處理管道添加驗證邏輯;提供一個用于在每個請求中插入自定義身份驗證策略的場所。查詢偵聽器不能采用參數(shù)。
請求/URI 處理
當(dāng)數(shù)據(jù)服務(wù)接收到 GET 請求時,將處理請求 URI 并調(diào)用數(shù)據(jù)服務(wù)上定義的任何查詢截獲方法。下面的示例演示查詢偵聽器方法的實現(xiàn),此方法可截獲針對訂單的 GET 請求。此偵聽器僅返回分配給滿足 CustomerID=="AROUT" 條件的客戶的訂單。若要對發(fā)送請求的用戶進(jìn)行身份驗證,以便此方法將返回分配給每個用戶的訂單,則需要更多代碼。
[QueryInterceptor("Orders")]
public Expression<Func<Orders, bool>> FilterOrdersByCustomer()
{
return o => o.Customers.CustomerID == "AROUT";
}