[譯]LINQ TO SQL 介紹(定義資料模型類) – Part.2

yifanwu發表於2021-09-09


 PDF版瀏覽:http://files.cnblogs.com/JimmyZhang/Linq-To-Sql-Part_2-Define-Data-Model-Class.pdf

出處:Linq To Sql (Part.2 – Defining Our Model Classes)

術語表

Data Model:資料模型
Designer:設計器
Class Library:類庫
Client Project:客戶端專案
Conduit:管道
Entity Class:實體類
Instance:例項
Partial Class:部分類
Runtime:執行時
Execution logic:執行邏輯
RelationShip Associations:關係之間的聯絡
Delay/Lazy:延遲/惰性 載入
Prefectched:預獲取

在我部落格上的隨筆 LINQ TO SQL Part .1中,我討論了“什麼是LINQ TO SQL”這個問題,並提供了一些可以使用它的基本場景。

在我的第一篇隨筆中,我提供了一些程式碼範例,示範瞭如何使用 LINQ TO SQL進行一些常見的資料操作任務,其中包括下面幾個方面

l         如何對資料庫進行查詢

l         如何更新資料庫中的一行

l         如何在資料庫中插入行並給這些行建立關係

l         如何刪除資料庫中的一行

l         如何呼叫儲存過程

l         如何使用伺服器端分頁獲取資料

我使用一個如下圖所示的LINQ TO SQL類模型實現了上面的所有操作。

圖片描述

在本文中,也是這一系列的第二篇隨筆中,我將更細緻地講解如何建立上圖所示的LINQ TO SQL資料模型。

LINQ TO SQL, LINQ TO SQL 設計器,以及所有我在這篇隨筆中將要討論的特性都將作為.Net 3.5的一部分伴隨著 Visual Studio “Orcas”版本一起釋出。

透過下載 Visual Studio “Orcas” Beta 1 或者 Visual Web Developer Express “Orcas” Beta1,你可以按我下面將要講解的步驟一步步的學習。它們可以和VS2005同時安裝在同一臺機器上。

建立一個新的 LINQ TO SQL資料模型

你可以在Visual Studio中點選 “新增新項”選項卡,並且選擇其中的“LINQ TO SQL”來新增一個LINQ TO SQL 資料模型到一個 ASP.NET 類庫 或者 Windows客戶端專案中。

圖片描述

選擇“LINQ TO SQL”專案將會自動執行LINQ TO SQL設計器,並允許你使用它去建立表現關聯式資料庫結構的類。它同樣也將建立一個強型別的“DataContext”類,這個類的屬性代表著我們為之建立模型的資料庫中的每張表和我們所建模型的每個儲存過程。如同我在 Part .1 那篇隨筆中所描述的那樣,DataContext類是一個主要的管道,我們透過它來對資料庫中的實體進行查詢以及將對資料的更改存回資料庫。

下面是一個空的 LINQ TO SQL ORM (NOTE:物件/關係對映,可以參閱 Part.1)的截圖,也是你在建立一個新的 LINQ TO SQL 模型之後將會看到的。

圖片描述

實體類

LINQ TO SQL 使你可以建立 由類到資料庫,或者由資料庫到類的對映。這些類通常都被稱作“實體類”,而他們的例項,被叫做“實體”。實體類對映到資料庫中的表。實體類的屬性通常對映到表的欄位。每個實體類的例項都代表了資料庫表中的一行。

由LINQ TO SQL 定義的實體類 不需要 繼承某個特定的基類,這就意味著你可以讓它從任何你想要的物件上繼承。所有透過使用 LINQ TO SQL 設計器建立的類都被定義為“部分類”,這意味著你可以有選擇的深入程式碼,給它們新增一些額外的屬性、方法、事件。

與由VS2005中提供的 DataSet/TableAdapter 方式不同,當使用LINQ TO SQL 設計器時,你在定義你的資料模型和資料訪問層時不需要給出 SQL 查詢語句。

相反,你只把精力集中在定義你的實體類,它們是如何對映自資料庫/對映到資料庫 以及 它們之間的關係。LINQ TO QL OR/M 實現將會在你與資料庫實體互動或者使用這些實體時體貼地在執行時為你建立合適的SQL執行邏輯。你可以使用LINQ查詢語法明確地指明你想要如何對你的資料模型以一種強型別的方式進行查詢。

圖片描述

當你新增了上面所示的來自“Northwind”的兩個表(Categories 和 Products)和檢視(Invioces)到LINQ TO SQL 設計器中。根據底層的資料庫構架,你將會自動獲得下面所示的三個實體類。

圖片描述

使用上面定義的資料模型類,我現在可以執行所有在 Part 1 中演示的程式碼範例了(除過儲存過程)。我不需要寫任何額外的程式碼或者配置,就可以實現查詢、新增、刪除、修改以及伺服器端分頁的操作。

命名和Pluralization

當你使用LINQ TO SQL設計器的時候,應該注意到的一件事就是,當它在根據你的資料庫構架為你自動地新增實體類的時候,它也將會自動地為你“Pluralize”不同的表和欄位。舉個例子,我們上面例子中的“Products”表產生了一個“Product”類,而“Categories”表產生了一個“Category”類。這種類的命名有助於使你的模型與.Net命名規範相一致,並且我經常會發現使用編輯器做這事是非常方便的(尤其是在為你的模型中新增大量的表的時候)。

如果你不喜歡設計器生成的表或者欄位的名字,當然,你可以修改它們並且將它們改成任何你想要的名字。你可以透過編輯設計器中的實體/屬性名來修改,也可以透過屬性欄。

NOTEPluralization,找不到合適的詞翻譯,根據上下文,可以理解成 “規範命名”。

圖片描述

設定 實體/屬性/聯絡 的名字與你資料庫構架中的名字不一樣的能力,在很多情況下非常有用,特別是:

1.       當你的後臺資料庫 表/欄位 的名稱改變的時候。因為你的實體模型可以擁有和後臺構架不同的名字,你可以決定只更新你的對映規則,但是卻不更新你的應用程式或者查詢程式碼,以便使用這個新的表/欄位 名字。

2.       當你有一個資料庫構架,其中的物件名字不是非常的“乾淨”。比如說,使用諸如“au_lname”和“au_fname”這樣的名字作為你的實體類的屬性名,你可以在你的實體類中將它們更改為“LastName”和“FirstName”,並且根據這個名字進行開發(而不需要更改資料庫中的欄位名字)。

關係之間的聯絡

當你從伺服器欄拖動一個物件到LINQ TO SQL設計器中時,Visual Studio將會檢查物件的主鍵/外來鍵 關係,並且根據這個關係在它建立的不同實體類之間自動的建立一個預設的“關係之間的聯絡”。舉個例子,當我從Northwind中新增Products和Categories表到我的LINQ TO SQL設計器中的時候,你可以看到它們之間的一個一對多的關係建立了(這個是由設計器中的一個箭頭示意的)。

圖片描述

上面的聯絡將會使得Product實體類有了一個“Category”屬性,透過這個屬性,開發者可以訪問一個給定Product的Category。它也使得Category類有了一個“Products”集合,透過這個集合開發者可以獲得一個給定Category的所有Products。

圖片描述

如果你不喜歡設計器建模或者命名關係的這種方式,你可以覆蓋它。單擊設計其中表示關係的箭頭,並且透過屬性欄找到它的屬性,然後重新命名、刪除或者修改它。

延遲/惰性載入

LINQ TO SQL 允許開發者指定實體中的屬性在第一次訪問的時候應該是 預獲取還是 延遲/惰性載入。你透過在設計器中選擇任意實體的屬性或者關係來為實體的屬性定義預設的預獲取/延遲載入 規則,然後將屬性欄中的“Delay Loaded”屬性設定成True或者false。

舉個例子以說明什麼時候我們需要這樣做。考慮一下我們剛才建模的“Category”實體類。“Northwind”中有一張“Categories”表,這個表中含有一個“Picture”欄位,其中存有(很可能是很大的)表示種類的二進位制資料,而當我使用它的時候我只想獲取資料庫中的二進位制資料(而不是進行一個查詢將Category的名字列出來)。

可以透過在設計器中選擇它,然後在屬性欄中設定Picture的遲載入值來進行配置。

圖片描述

使用儲存過程

LINQ TO SQL 允許你有選擇的對儲存過程進行建模,將它作為 DataContext 類中的方法。舉個例子,假設我們定義了一個下面這樣簡單的儲存過程,以根據CategoryId獲取Product的資訊:

圖片描述

我可以使用Visual Studio中的伺服器皮膚 拖放 儲存過程到 LINQ TO SQL設計器中,以便新增一個強型別的方法,這個方法用於呼叫這個儲存過程。如果我將儲存過程拖到設計器的“Product”實體,LINQ TO SQL 設計器將宣告這個儲存過程返回一個Ienumerable

圖片描述

然後,我可以使用LINQ 查詢語法(這將產生一個實際的SQL查詢語句),或者,我可以呼叫上面新增的儲存過程來從資料庫中獲取Product。

使用儲存過程進行更新/刪除/插入資料

預設情況下,在你插入/更新/刪除實體的時候,LINQ TO SQL將會自動建立合適的SQL表示式。舉個例子,你寫下如下的LINQ TO SQL程式碼以便更新 “Product”例項的一些值。

圖片描述

預設情況下,當你提交更改時,LINQ TO SQL將會為你建立合適的“更新”語句(我會在以後的隨筆中詳細討論)。

你也可以有選擇的定義和使用自定義的 INSERT、UPDATE、DELETE 儲存過程。對這些進行設定,點選LINQ TO SQL 設計器中的實體類,並且在它的屬性欄中在 Delete/Update/Insert 屬性中點選“…”,然後選擇特定的預先寫好的儲存過程。

圖片描述

改變上面設定做的好處是它純粹只是在LINQ TO SQL的對映層上進行,這就意味著我之前示範的Update程式碼不需要做任何修改就可以繼續使用。這也就避免了即使在後來使用自定義的儲存過程,開發者也不需要改寫程式碼。

總結

LINQ TO SQL 提供一種良好、清爽的方式對你應用程式中的資料層進行建模。一旦你定義好你的資料模型,你可以簡單、高效的透過它實現查詢、插入、更新、刪除。

透過使用Visual Studio和Visual Web Developer Express內建的LINQ TO SQL設計器,你可以非常快速地建立和管理你的LINQ TO SQL資料模型。LINQ TO SQL設計器同樣提供很大的靈活性,允許你自定義預設的行為,並且可以覆蓋/擴充套件這個系統以適應你的特殊需求。

在接下來的隨筆中,我將使用我們剛才建立的這個資料模型,深入地探討查詢、插入、更新和刪除的特性。在更新、插入和刪除的隨筆中,我將討論如何新增自定義的業務層/資料層 校驗到我們設計的實體中,以提供額外的驗證邏輯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2806701/,如需轉載,請註明出處,否則將追究法律責任。

相關文章