[譯]LINQ TO SQL 介紹(定義資料模型類) – Part.2
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命名規範相一致,並且我經常會發現使用編輯器做這事是非常方便的(尤其是在為你的模型中新增大量的表的時候)。
如果你不喜歡設計器生成的表或者欄位的名字,當然,你可以修改它們並且將它們改成任何你想要的名字。你可以透過編輯設計器中的實體/屬性名來修改,也可以透過屬性欄。
NOTE:Pluralization,找不到合適的詞翻譯,根據上下文,可以理解成 “規範命名”。
設定 實體/屬性/聯絡 的名字與你資料庫構架中的名字不一樣的能力,在很多情況下非常有用,特別是:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB資料模型介紹MongoDB模型
- js中關於定義類的幾種方式介紹JS
- 資料倉儲—資料庫—SQL Server 介紹資料庫SQLServer
- Linq to sql 自定義型別SQL型別
- 資料倉儲 - 星座模型、星型模型和雪花模型的介紹模型
- java的LINQ :Linq4j簡明介紹Java
- [翻譯]資料結構——trie樹介紹資料結構
- SQL Server 中的鎖定介紹SQLServer
- 三維點雲語義分割模型介紹模型
- [大資料][機器學習]之Model Card(模型卡片)介紹大資料機器學習模型
- 軟體定義汽車之SOME/IP介紹
- 【譯】停止濫用div!HTML語義化介紹HTML
- 【譯】停止濫用div! HTML語義化介紹HTML
- LINQ-to-SQL那點事~LINQ-to-SQL中的資料快取與應對SQL快取
- 精讀《手寫 SQL 編譯器 - 文法介紹》SQL編譯
- 精讀《手寫 SQL 編譯器 – 文法介紹》SQL編譯
- 把Access轉成SQL資料庫的方法介紹SQL資料庫
- SVG XML 格式定義圖形入門介紹SVGXML
- Django實踐(二)——使用模型類定義資料表,實現表單頁面跳轉Django模型
- Prepack 介紹(譯)
- 資料庫介紹資料庫
- Sql索引介紹SQL索引
- NoSQL資料庫的四大分類介紹SQL資料庫
- 8.3 BERT模型介紹模型
- WSRR 業務模型介紹模型
- 資料庫介紹--認識簡單的SQL語句資料庫SQL
- 資料庫架構和物件、定義資料完整性-SQL Server資料庫架構物件SQLServer
- LINQ to SQLSQL
- 【iOS】定義@property時常用的修飾詞介紹iOS
- swift 資料模型Modle類Swift模型
- LINQ系列:LINQ to SQL Transact-SQL函式SQL函式
- ajax傳輸超大資料設定方式簡單介紹大資料
- 越來越簡單的資料類定義:named tuple
- 定義多維的點模板類,任意資料型別資料型別
- linq如何設定連線資料庫的字串資料庫字串
- 類定義介面
- [譯] React Profiler 介紹React
- 【譯】介紹JSXJS