LINQ to SQL系列Part 1 - Using LINQ to SQL


LINQ to SQL系列Part 1 - Using LINQ to SQL
本文轉載自:
http://www.cnblogs.com/hanxianlong/archive/2007/11/16/960813.html

英文原貼鏈接:
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

本文同步發表在ScottGu的中文博客上
http://blog.joycode.com/scottgu/archive/2007/11/17/111496.aspx


What Is LINQ to SQL?

什麼是LINQ to SQL? LINQ to SQL 是O/RM(對象關係映射)在.NET Framework“Orcas" release中的的一種實現,它允許你用.NET 的類來生成一個關係型的數據庫。然後你可以用LINQ對從該對象中對數據庫進行查詢,更新/插入/刪除。LINQ to SQL完全支持事務,視圖和存儲過程。它還提供了一種方便地在你的數據模型中對集合數據驗證和業務邏輯規則的進行驗證的方法。


LINQ to SQL 構造數據庫:

VS "Orcas"中內置了一個提供了一種簡單地將數據庫可視化地轉換爲LINQ to SQL關係模型的設計器。我下一篇博客將會更深入一些來介紹怎麼使用該設計器(你可以看這個我在1月份錄製地關於如何使用它的錄像)

通過LINQ to SQL設計器我可以方便地設計出如下的作爲事例的"Northwind"數據庫模型:

 


上圖定義了四個實體類:Product, Category, Order and OrderDetail.  每個類的屬性都映射到數據庫中相應的表中。每個類的實例代表了數據表中的一行記錄。

在上圖中,四個實體類中的箭頭代表了各個實體之間的關係。它們主要是根據數據庫中的主鍵/外鍵關係生成的。設計器上的箭頭的指向表明了該關係是一對一還是一對多的關係。基於此,強類型的屬性將會被加入到此實體類中。例如,上邊的Category類和Product類之間有一個“一對多”的關係。這意味着我可以有一個"Categories"屬性,該屬性代表了所有的在該類中的產品對象集合。Product類將會有一個"Category"屬性來指向一個Category 類的實例,該Category類的實例表明了了產品所屬的類別。

LINQ to SQL設計器的右側是跟我們的數據庫模型交互的存儲過程。上邊的例子中我添加了一個“GetProductsByCategory”存儲過程。它有一個categoryID作爲輸入參數,返回一個產品序列。下面的事例代碼將展示如何調用該存儲過程。

瞭解DataContext類

當你點擊LINQ to SQL設計器上的“save"按鈕時,VS將會保存代表了我們的實體和數據庫關係的類。對於每一個LINQ to SQL設計器加入到我們的解決方案的文件,也會生成一個自定義的DataContext類。

例如,下圖就是基於我們上邊設計的模型而生成的的NorthwindDataContext類:


LINQ to SQL 代碼事例

用LINQ to SQL 設計器生成我們的數據庫模型之後,我們就可以很方便地寫代碼對數據庫進行操作。下邊是一些展示了一些常用的數據庫操作的代碼:

1)從數據庫中查詢 出Products

下面的代碼用LINQ to SQL 查詢語法來查詢Product對象序列。注意代碼是如何通過Product/Category關係來僅查出那些類別是"Beverages"的產品:
C#:


 

VB:

2)更新數據庫中的一條產品記錄

下面的代碼展示瞭如何從數據庫中查詢出單一的一條產品記錄,更新它的價格,然後將更改保存至數據庫:

C#:


 

VB:

注意:VB在"Orcas" Beta1中尚不支持lambdas。但是在Beta2中它就會支持了--那時代碼就會能寫得更爲簡潔一些。


3)向數據庫中插入一條新的Category和兩條新的Products

如下的代碼展示瞭如何生成一個新的category,然後生成兩條和該category相關聯的產品,然後這三條記錄被保存至數據庫。
 

注意下邊我如何不用手動地去維護主/外鍵關係,取而代之的是我只向categorys的"Products"集合中添加了兩個Product記錄,然後通過向DataContext的"Categories"集合中添加這個Category對象,LINQ to SQL將會知道自動是爲我加上PK/FK的關係。
C#

 

VB:

 

4)從數據庫中刪除Products

下面的代碼展示瞭如何從數據庫中刪除所有的玩具產品:

C#:

 

VB:

 

5)調用存儲過程

下面的代碼展示瞭如何不用LINQ的查詢語法查詢Product實體,而是通過調用我們向數據模型中添加的“GetProductsByCategory”存儲過程。注意,一旦我查詢出了Product結果集,我可以更新/刪除它們,然後再調用 db.SubmitChanges()來將這些更新提交到數據庫。

 C#:

  

VB:

  

 6)查詢在服務器端分頁的產品

下面的代碼展示瞭如何實現作爲LINQ語言一部分的高效地服務器端分頁。通過用下面的Skip()和Take()操作符,我們從數據庫中只查詢出從200行開始的10條記錄:

C#:

 

VB:

  

總結

LINQ to SQL提供了一種優秀、明瞭的方法來爲你的應用程序來建立數據層。一旦你定義了數據模型,你就可以方便而且有效地對它進行查詢,插入,更新和刪除。

 希望以上的介紹和事例代碼能夠刺激你的胃口,讓你學習到更多。在接下來的幾周裏我會在該系列中更具體地探索LINQ to SQL。

Scott

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章