LINQ和ADO.NET技術(shù)概述
LINQ和ADO.NET
如今,許多業(yè)務(wù)開發(fā)人員都必須使用兩種(或多種)編程語言:用于業(yè)務(wù)邏輯和表示層的高級語言(如 Visual C# 或 Visual Basic)和可與數(shù)據(jù)庫交互的查詢語言(如 Transact-SQL)。這要求開發(fā)人員精通多種語言才能奏效,同時也導(dǎo)致在開發(fā)環(huán)境中語言不匹配。例如,使用數(shù)據(jù)訪問 API 對數(shù)據(jù)庫執(zhí)行查詢的應(yīng)用程序會將查詢指定為用引號括起的字符串。編譯器不能讀取此查詢字符串,因此不會檢查是否有錯誤,如語法無效或引用的列或行是否實際存在。不會檢查查詢參數(shù)的類型,也不支持 IntelliSense。
語言集成查詢 (LINQ) 使開發(fā)人員能夠在應(yīng)用程序代碼中形成基于集合的查詢,而不必使用單獨的查詢語言。您可以編寫針對各種可枚舉數(shù)據(jù)源(即實現(xiàn) IEnumerable 接口的數(shù)據(jù)源)的 LINQ 查詢,可枚舉數(shù)據(jù)源包括駐留在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)、XML 文檔、SQL 數(shù)據(jù)庫和 DataSet 對象等。雖然這些可枚舉數(shù)據(jù)源以多種方式實現(xiàn),但它們都公開相同的語法和語言構(gòu)造。由于可以使用編程語言本身形成查詢,因此您不必使用編譯器無法理解或驗證的以字符串形式嵌入的其他查詢語言。通過提供編譯時類型和語法檢查以及 IntelliSense,將查詢集成到編程語言也使 Visual Studio 程序員的工作更有效。這些功能降低了對查詢調(diào)試和錯誤修復(fù)的需求。
有三種獨立的 ADO.NET 語言集成查詢 (LINQ) 技術(shù):LINQ to DataSet、LINQ to SQL 和 LINQ to Entities。LINQ to DataSet 提供針對 DataSet 的形式多樣的優(yōu)化查詢,LINQ to SQL 使您可以直接查詢 SQL Server 數(shù)據(jù)庫架構(gòu),而 LINQ to Entities 允許您查詢 實體數(shù)據(jù)模型。
將數(shù)據(jù)從 SQL 表傳輸?shù)絻?nèi)存中的對象通常單調(diào)乏味并容易出錯。由 LINQ to DataSet 和 LINQ to SQL 實現(xiàn)的 LINQ 提供程序可以將源數(shù)據(jù)轉(zhuǎn)換為基于 IEnumerable 的對象集合。在您查詢數(shù)據(jù)和更新數(shù)據(jù)時,程序員始終會以 IEnumerable 集合的形式查看這些數(shù)據(jù)。為編寫針對這些集合的查詢提供完全的 IntelliSense 支持。
LINQ和ADO.NET:關(guān)系圖
下面的關(guān)系圖概述了 ADO.NET LINQ 技術(shù)如何關(guān)聯(lián)到高級編程語言和啟用 LINQ 的數(shù)據(jù)源。
下面各節(jié)提供有關(guān) LINQ to DataSet、LINQ to SQL 和 LINQ to Entities 的更多信息。
LINQ to DataSet
DataSet 是賴以生成 ADO.NET 的斷開連接式編程模型的關(guān)鍵元素,使用非常廣泛。LINQ to DataSet 使開發(fā)人員能夠通過使用許多其他數(shù)據(jù)源可用的同樣的查詢表述機(jī)制在 DataSet 中內(nèi)置更豐富的查詢功能。
LINQ to SQL
LINQ to SQL 是適合不需要映射到概念模型的開發(fā)人員使用的有用工具。通過使用 LINQ to SQL,您可以直接在現(xiàn)有數(shù)據(jù)庫架構(gòu)上直接使用 LINQ 編程模型。LINQ to SQL 使開發(fā)人員能夠生成表示數(shù)據(jù)的 .NET Framework 類。這些生成的類直接映射到數(shù)據(jù)庫表、視圖、存儲過程和用戶定義的函數(shù),而不映射到概念數(shù)據(jù)模型。
使用 LINQ to SQL 時,除了其他數(shù)據(jù)源(如 XML)外,開發(fā)人員還可以使用與內(nèi)存集合和 DataSet 相同的 LINQ 編程模式直接編寫針對存儲架構(gòu)的代碼。
LINQ to Entities
大多數(shù)應(yīng)用程序目前是在關(guān)系數(shù)據(jù)庫之上編寫的。有時這些應(yīng)用程序?qū)⑿枰c以關(guān)系形式表示的數(shù)據(jù)進(jìn)行交互。數(shù)據(jù)庫架構(gòu)并不總是構(gòu)建應(yīng)用程序的理想選擇,并且應(yīng)用程序的概念模型與數(shù)據(jù)庫的邏輯模型不同。實體數(shù)據(jù)模型 是可用于對特定域的數(shù)據(jù)進(jìn)行建模的概念數(shù)據(jù)模型,以便應(yīng)用程序可作為對象與數(shù)據(jù)進(jìn)行交互。
通過 實體數(shù)據(jù)模型,在 .NET 環(huán)境中將關(guān)系數(shù)據(jù)作為對象公開。這樣,對象層就成為 LINQ 支持的理想目標(biāo),從而允許開發(fā)人員通過用于構(gòu)建業(yè)務(wù)邏輯的語言編寫對數(shù)據(jù)庫的查詢。
以上就介紹了LINQ和ADO.NET的關(guān)系以及一些技術(shù)方面的簡介。
【編輯推薦】