天天看點

有了LINQ,我還需要寫DAL層嗎?

LINQ---Language Integrated Query

一般的,當你聽說要執行查詢操作的時候,首先會想到的是T-SQL語句查詢資料庫,或者XPath查詢XML文檔。

而現在的呢?LINQ提供了一種通用的方式讓你可以查詢“所有”的資料資訊源。

LINQ的全稱是Language Integrated Query. 它作為一種資料查詢語言直接內建到了主流程式設計語言之中

比如:C#3.0,VB9.0。對于程式員來說,在以後的查詢操作中,我們不必再将T-SQL直接嵌入到程式代碼之中。

LINQ可操作的查詢資料源除了資料庫、XML文檔以外,還包括集合、數組等任何支援IEnumerable

或者IQueryable的資料源。你甚至可以查詢你自己的應用程式有多次個pubic方法,或者一個namespace

有多少個類!Cool!LINQ将會作為Orcas的一部分釋出。

用于SQL的LINQ是内置于.NET Framework“Orcas”版本中的一種O/RM(對象關系映射)實作,允許使用.NET類對一個關系型資料庫進行模組化。然後就可以使用LINQ對資料庫進行查詢了,而且還支援update/insert/delete操作!

用于SQL的LINQ完全支援資料庫中的事務,視圖和存儲過程。還提供了一種簡單的方式來整合資料驗證和業務邏輯規則到你的資料模型中去。

第一步,使用LINQ對資料庫模組化

Visual Studio“Orcas”内置了用于SQL的LINQ設計器,提供了快速模組化功能和LINQ對象模型的可視化操作(作者将在下篇文章中詳細講解)。以SQL Server裡著名的“北風”資料庫為例:

有了LINQ,我還需要寫DAL層嗎?

其中定義了四個類:Product,Category,Order和OrderDetail。類中的每個屬性映射了資料庫表中的相應的字段。每個類的執行個體則代表了資料庫表中的一條記錄。箭頭代表了不同實體間的關系,映射了資料庫中的主鍵/外鍵。箭頭方向則代表了關系是一對一還是一對多,基于這個,強類型屬性就會添加到實體類中。例如,Category類與Product類就是一個一對多關系,這就意味着Product中有一個“Category”屬性指向一個代表了Product所屬類型的Category執行個體。

設計器右側視窗中則包含了與現在的資料庫模型互動的相關存儲過程的清單,可以手動添加。

當在設計器點選“儲存”時,Visual Studio會生成代表模組化中的實體和關系的.NET類,自動生成檔案添加到解決方案中。同時還會生成一個定制的DataContext類,主要用來資料庫中查詢實體以及更新資料庫。DataContext類中會建立代表模組化中每個表的屬性,和添加的每個存儲過程的相應方法。

有了LINQ,我還需要寫DAL層嗎?

第二步,LINQ應用

1.        查詢

通過Product/Category關系來查詢指定Category的Product,var關鍵字表示聲明的是匿名類型

有了LINQ,我還需要寫DAL層嗎?

2.        更新

先從資料庫中取出單個Product,更新價格,儲存變化回資料庫

有了LINQ,我還需要寫DAL層嗎?

3.        插入

先建立一個Category,在建立兩個屬于該Category的Product,然後儲存回資料庫。注意,在這裡不需要管手動理主鍵/外鍵關系,僅需要添加Proudct到Category中Products集合,再把Catgory添加到DataContext中的Categories集合即可,DataContext會自動維護主鍵/外鍵關系。

有了LINQ,我還需要寫DAL層嗎?

4.        删除

從資料庫中删除指定Product

有了LINQ,我還需要寫DAL層嗎?

5.        調用存儲過程

注意,一旦得到Product的集合結果,同樣可以執行update/delete操作,并儲存回資料庫。

有了LINQ,我還需要寫DAL層嗎?

6.        分頁讀取

使用Skip()和Take()方法,從資料庫中得到指定行的開始的指定行數的Product集合。有些類似于ObjectDataSource中的分頁方法(startRowIndex,maximumRows兩個參數),還想到了SQL Server 2005中的ROW_Number()函數:)

有了LINQ,我還需要寫DAL層嗎?

總結:

還需要自己寫資料通路層嗎~~~~