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