Link To Sql簡單


Linq及其擴展

Linq是一種數據查詢語言(它能夠從多種數據源中查詢數據). 現在基於Linq的擴展有:

  1. Linq To Object:主要是從內存對象中查詢數據
  2. Linq To Sql:主要是從MS Sql Server數據庫中操縱(查詢\新增\修改\刪除)數據
  3. Linq To XML:主要是從XML片段或XML文檔中查詢數據

 

Linq To Sql簡介

Linq To Sql是一個微軟在.NET Framework 3.5中推出的一款ORM(Object  Relation  Model)實體框架.一個好的實體框架除了能夠將數據表映射為實體類,還應該支持使用面向的思想去操縱關系型數據庫.現在比較流行的ORM框架包括:Linq To Sql\Entity Framework\Nhibernate.

我們在使用Linq To Sql的過程中,很少去手寫SQL語句就能實現常見的數據增刪改差操作.但是它的底層實現仍然是Ado.net.那么如何檢測Linq To Sql生成的SQL語句呢?通過DataContext的Log屬性即可實現檢測功能.

 

Linq To Sql設計器

在服務器資源管理器中通過拖拽的方式,將數據表放置到Linq To Sql的設計器區域后,VS自動將這些數據表生成N+1(N為數據表的個數)個類.這些類大致可以分為2:一種是數據庫上下文,另一種是實體類.數據庫上下文類就是名稱以DataContext結尾的類,它繼承自Sytem.Data.Linq.DataContext.

他們的作用分別是:DataContext類用於和數據庫交互(增刪改查),每次進行數據庫操作時,都應該先創建該類對象;

而每一個實體類則和數據表相對應.

DataContext的特性標記為Database,表示與數據庫相關

實體類的特性標記是Table,表示與數據表相關

實體類中屬性的特性標記是Column,表示與數據列相關

 

DataContext數據庫上下文類的常用屬性和方法

CreateDatabase():創建數據庫

DeleteDatabase():刪除數據庫

DatabaseExits():判斷數據庫是否存在

Log:該屬性用於檢測和寫入LINQ TO SQL生成的SQL語句

 

Linq To Sql常用操作

新增數據

void  InsertOnSubmit():實現每次新增1條記錄

void  InsertAllOnSubmit():實現一次新增多條記錄

注意:調用InsertOnSubmit,一定要再調用DataContext.SubmitChanges();

 

修改數據

首先,查詢到要修改的元素

其次,改變元素相應的屬性

最后,調用dataContext.SubmitChanges()

 

刪除數據

首先,查詢到要刪除的元素

其次,調用void DeleteOnSubmit()刪除單個元素,如果要刪除多個可以調用void DelteAllOnSubmit()

最后,調用dataContext.SubmitChanges();

 

數據查詢

數據查詢時,2種常用的使用方式.一種是使用linq的標准語法;一種是使用Lambda表達式擴展方法.

單表查詢:

 

多表查詢:

 

典型應用場景

場景1:在一個頁面中實現:添加一個工資模版,以及該工資模版的多個工資條目

 

做法一:

 

做法二:

 

上述兩種做法都可以實現功能.做法一是先實現工資模版的新增,然后再新增工資條目.做法二是向工資模版對象中添加多個工資條目,然后向數據庫提交工資模版.

需要注意的是,做法一中為工資條目對象設置了工資模版ID,而做法二並沒有為工資條目設置工資模版ID.但為什么最后效果卻是一樣的呢?

因為我們將工資條目添加到工資模版對象中時,linq to sql會自動將主外鍵關系的字段賦值.

場景二:使用Linq To Sql進行分頁

分頁功能需要使用兩個函數進行組合:Skip()Take()

Skip(int count):跳過count條數據

Take(int count):從開始位置提取count條記錄

分頁查詢: dataContext.XXX.Skip(pageIndex * pageSize).Take(pageSize)

pageIndex是要提取的第幾頁記錄.pageIndex >= 0

pageSize是每頁顯示的記錄條數

 

 

 

 

其他

  • EntitySet<T>:該類表示數據實體的集合
  • System.Data.Linq.Table<T>:該類表示數據表對象
  • 如何判定通過Linq To Sql進行數據的修改\刪除\新增是否成功?

因為InsertOnSubmit方法和DataContext.SubmitChanges()方法都沒有任何返回值,所以無法通過他們判斷出是否操作成功.判斷的標准就是:如果不拋出異常就成功,拋出異常肯定就失敗了.

  • 對於標識列(自動生成列)而言,在調用DataContext.XXX.InsertOnSubmit()后是無法獲取標識列的值的;只有在調用DataContext.SubmitChanges()后方能獲取標識列的值.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM