LINQ和ADO.NET技術(shù)概述
LINQ和ADO.NET
如今,許多業(yè)務(wù)開發(fā)人員都必須使用兩種(或多種)編程語(yǔ)言:用于業(yè)務(wù)邏輯和表示層的高級(jí)語(yǔ)言(如 Visual C# 或 Visual Basic)和可與數(shù)據(jù)庫(kù)交互的查詢語(yǔ)言(如 Transact-SQL)。這要求開發(fā)人員精通多種語(yǔ)言才能奏效,同時(shí)也導(dǎo)致在開發(fā)環(huán)境中語(yǔ)言不匹配。例如,使用數(shù)據(jù)訪問 API 對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢的應(yīng)用程序會(huì)將查詢指定為用引號(hào)括起的字符串。編譯器不能讀取此查詢字符串,因此不會(huì)檢查是否有錯(cuò)誤,如語(yǔ)法無(wú)效或引用的列或行是否實(shí)際存在。不會(huì)檢查查詢參數(shù)的類型,也不支持 IntelliSense。
語(yǔ)言集成查詢 (LINQ) 使開發(fā)人員能夠在應(yīng)用程序代碼中形成基于集合的查詢,而不必使用單獨(dú)的查詢語(yǔ)言。您可以編寫針對(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),但它們都公開相同的語(yǔ)法和語(yǔ)言構(gòu)造。由于可以使用編程語(yǔ)言本身形成查詢,因此您不必使用編譯器無(wú)法理解或驗(yàn)證的以字符串形式嵌入的其他查詢語(yǔ)言。通過提供編譯時(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ù)。為編寫針對(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 的斷開連接式編程模型的關(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ù)庫(kù)架構(gòu)上直接使用 LINQ 編程模型。LINQ to SQL 使開發(fā)人員能夠生成表示數(shù)據(jù)的 .NET Framework 類。這些生成的類直接映射到數(shù)據(jù)庫(kù)表、視圖、存儲(chǔ)過程和用戶定義的函數(shù),而不映射到概念數(shù)據(jù)模型。
使用 LINQ to SQL 時(shí),除了其他數(shù)據(jù)源(如 XML)外,開發(fā)人員還可以使用與內(nèi)存集合和 DataSet 相同的 LINQ 編程模式直接編寫針對(duì)存儲(chǔ)架構(gòu)的代碼。
LINQ to Entities
大多數(shù)應(yīng)用程序目前是在關(guān)系數(shù)據(jù)庫(kù)之上編寫的。有時(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)行交互。
通過 實(shí)體數(shù)據(jù)模型,在 .NET 環(huán)境中將關(guān)系數(shù)據(jù)作為對(duì)象公開。這樣,對(duì)象層就成為 LINQ 支持的理想目標(biāo),從而允許開發(fā)人員通過用于構(gòu)建業(yè)務(wù)邏輯的語(yǔ)言編寫對(duì)數(shù)據(jù)庫(kù)的查詢。
以上就介紹了LINQ和ADO.NET的關(guān)系以及一些技術(shù)方面的簡(jiǎn)介。
【編輯推薦】



















