Linq To Sql 练习
使用LINQ to SQL (第一部分)??
2009-05-12 14:33:21|??分類: 默認(rèn)分類 |??標(biāo)簽: |字號(hào)大中小?訂閱
什么是LINQ to SQL?
LINQ to SQL 是隨.NET Framework Orcas版一起發(fā)布的O/RM(對(duì)象關(guān)系映射)實(shí)現(xiàn),它允許你用.NET 的類來(lái)對(duì)一個(gè)關(guān)系型數(shù)據(jù)庫(kù)建模。然后你可以用LINQ對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,以及進(jìn)行更新/插入/刪除數(shù)據(jù)的操作。
LINQ to SQL完全支持事務(wù),視圖和存儲(chǔ)過(guò)程。它還提供了一種把數(shù)據(jù)驗(yàn)證和業(yè)務(wù)邏輯規(guī)則結(jié)合進(jìn)你的數(shù)據(jù)模型的便利方式。
使用LINQ to SQL對(duì)數(shù)據(jù)庫(kù)建模:
Visual Studio Orcas版中提供了一個(gè)LINQ to SQL設(shè)計(jì)器,該設(shè)計(jì)器提供了一種簡(jiǎn)易的方式,將數(shù)據(jù)庫(kù)可視化地轉(zhuǎn)換為L(zhǎng)INQ to SQL對(duì)象模型。我下一篇博客將會(huì)更深入一些來(lái)介紹怎么使用該設(shè)計(jì)器(你可以觀看我一月份時(shí)錄制的這個(gè)關(guān)于如何從頭開始創(chuàng)建LINQ to SQL模型的錄像)。
通過(guò)LINQ to SQL設(shè)計(jì)器,我可以方便地設(shè)計(jì)出如下所示的Northwind數(shù)據(jù)庫(kù)的示例模型:
上圖定義了四個(gè)實(shí)體類:Product, Category, Order 和 OrderDetail。每個(gè)類的屬性都映射到數(shù)據(jù)庫(kù)中相應(yīng)表的字段,類實(shí)體的每個(gè)實(shí)例代表了數(shù)據(jù)表中的一行記錄。
在上圖中,四個(gè)實(shí)體類間的箭頭代表了不同實(shí)體間的關(guān)聯(lián)/關(guān)系。它們主要是根據(jù)數(shù)據(jù)庫(kù)中的主鍵/外鍵關(guān)系生成的。設(shè)計(jì)器上的箭頭的指向表明了該關(guān)系是一對(duì)一還是一對(duì)多的關(guān)系。基于此,強(qiáng)類型的屬性將會(huì)被加入到實(shí)體類中。例如,上邊的Category類和Product類之間有一個(gè)“一對(duì)多”的關(guān)系。這意味著Category類將有一個(gè)"Products"屬性,該屬性代表了在該類中所有的產(chǎn)品對(duì)象的集合。而Product類將會(huì)有一個(gè)"Category"屬性來(lái)指向一個(gè)Category類的實(shí)例,該Category類的實(shí)例表明了了產(chǎn)品所屬的類別。
上圖中LINQ to SQL設(shè)計(jì)器的右側(cè)列出了與我們的數(shù)據(jù)庫(kù)模型交互的存儲(chǔ)過(guò)程。在上邊的例子中,我添加了一個(gè)“GetProductsByCategory”存儲(chǔ)過(guò)程。它有一個(gè)categoryID作為輸入?yún)?shù),返回一個(gè)產(chǎn)品實(shí)體序列作為結(jié)果集。下面的代碼將展示如何調(diào)用該存儲(chǔ)過(guò)程。
理解DataContext類
當(dāng)你點(diǎn)擊LINQ to SQL設(shè)計(jì)器上的“保存"按鈕時(shí),Visual Studio將會(huì)保存我們建立的代表了實(shí)體和數(shù)據(jù)庫(kù)關(guān)系的各個(gè)類。針對(duì)加入到我們的解決方案的每一個(gè)LINQ to SQL設(shè)計(jì)器文件,同時(shí)也會(huì)生成一個(gè)自定義的DataContext類。這個(gè)DataContext類是我們從數(shù)據(jù)庫(kù)中查詢實(shí)體或者進(jìn)行更改操作的主要渠道。生成的DataContext類將含有一些屬性,對(duì)應(yīng)于我們?cè)跀?shù)據(jù)庫(kù)中建了模的每個(gè)數(shù)據(jù)表,以及一些方法,對(duì)應(yīng)于我們添加的每個(gè)存儲(chǔ)過(guò)程。
例如,下圖就是基于我們上邊設(shè)計(jì)的模型而生成的的NorthwindDataContext類:
LINQ to SQL 代碼例子
用LINQ to SQL 設(shè)計(jì)器對(duì)我們的數(shù)據(jù)庫(kù)建模之后,我們就可以很方便地編寫代碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。下邊是一些展示了常見(jiàn)的數(shù)據(jù)庫(kù)操作的代碼例子:
1) 從數(shù)據(jù)庫(kù)中查詢Products
下面的代碼用LINQ to SQL 查詢語(yǔ)法來(lái)獲取Product對(duì)象的IEnumerable序列。注意代碼是如何通過(guò)Product/Category關(guān)系來(lái)僅查出那些類別是"Beverages"的產(chǎn)品的:
C#:
VB:
2) 更新數(shù)據(jù)庫(kù)中的一條產(chǎn)品記錄
下面的代碼示范了如何從數(shù)據(jù)庫(kù)中查詢出單一的一條產(chǎn)品記錄,更新它的價(jià)格,然后將改動(dòng)保存至數(shù)據(jù)庫(kù):
C#:
VB:
注意:VB在Orcas Beta1中尚不支持Lambda。但是在Beta2中,它就會(huì)支持了--那時(shí)代碼就會(huì)能寫得更為簡(jiǎn)潔一些。
3) 向數(shù)據(jù)庫(kù)中插入一條新的Category和兩條新的Products
下面的代碼示范了如何生成一個(gè)新的分類,然后生成兩條和該分類相關(guān)聯(lián)的產(chǎn)品,然后將這三條記錄保存到數(shù)據(jù)庫(kù)中。
注意下邊,我不用手工去維護(hù)主/外鍵關(guān)系,取而代之的是,我只向分類對(duì)象的“Products”集合中添加了兩個(gè)Product記錄,然后把該Category對(duì)象添加到DataContext的“Categories”集合中,LINQ to SQL將知道自動(dòng)為我持久適當(dāng)?shù)腜K/FK的關(guān)系。
C#
VB:
4) 從數(shù)據(jù)庫(kù)中刪除Products
下面的代碼示范了如何從數(shù)據(jù)庫(kù)中刪除所有的玩具產(chǎn)品:
C#:
VB:
5) 調(diào)用存儲(chǔ)過(guò)程
下面的代碼示范了如何不使用LINQ查詢語(yǔ)法,而是通過(guò)調(diào)用我們?cè)谏厦嫦驍?shù)據(jù)模型中添加的“GetProductsByCategory”存儲(chǔ)過(guò)程來(lái)查詢Product實(shí)體。注意,一旦我查詢出了Product結(jié)果集,我可以更新/刪除它們,然后再調(diào)用 db.SubmitChanges()來(lái)將這些更新提交到數(shù)據(jù)庫(kù)。
C#:
VB:
6) 在服務(wù)器端分頁(yè)查詢Products
下面的代碼示范了如何通過(guò)LINQ查詢語(yǔ)法實(shí)現(xiàn)高效的服務(wù)器端數(shù)據(jù)庫(kù)分頁(yè)查詢。通過(guò)使用下面的Skip()和Take()操作符,我們從數(shù)據(jù)庫(kù)中只查詢出從200行開始的10條記錄:
C#:
VB:
總結(jié)
LINQ to SQL提供了一種很棒的、干凈利索的方法來(lái)為你的應(yīng)用程序來(lái)建立數(shù)據(jù)層。一旦你定義了數(shù)據(jù)模型,你就可以方便而且有效地對(duì)它進(jìn)行查詢,插入,更新和刪除。
轉(zhuǎn)載于:https://www.cnblogs.com/shixudong/archive/2013/01/22/2870910.html
總結(jié)
以上是生活随笔為你收集整理的Linq To Sql 练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 详细讲解JAVA中的IO流
- 下一篇: 让思考成为一种习惯:一位软件工程专业学生