国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

LinkToSql簡單

2019-11-14 16:13:58
字體:
來源:轉載
供稿:網友

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()后方能獲取標識列的值.

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黎平县| 武城县| 华坪县| 齐齐哈尔市| 郧西县| 宝鸡市| 年辖:市辖区| 昭苏县| 惠水县| 屏东市| 山阳县| 响水县| 玉门市| 柳河县| 含山县| 兖州市| 抚顺市| 巢湖市| 甘泉县| 布尔津县| 伊宁县| 日喀则市| 富平县| 福建省| 禄丰县| 昌邑市| 南澳县| 乐东| 西充县| 台东县| 阿克陶县| 彭泽县| 揭西县| 陕西省| 南部县| 随州市| 泽普县| 清流县| 汨罗市| 敦煌市| 大洼县|