自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳細(xì)介紹Linq to SQL

開發(fā) 后端
這里介紹這一篇介紹Linq to SQL,如果你已經(jīng)對(duì)Linq to SQL有使用經(jīng)驗(yàn)或者你覺得我說的有地方有錯(cuò)誤,有誤導(dǎo)大家的嫌疑,煩請(qǐng)不要吝嗇你的memory和CPU給我寫個(gè)評(píng)語,我將不勝感激。

在向大家詳細(xì)介紹Linq to SQL之前,首先讓大家了解下Linq to SQL的核心庫,下文全面介紹Linq to SQL。

Linq to SQL的核心庫是System.Data.Linq.dll(位于C:"Program Files"Reference Assemblies"Microsoft"Framework"v3.5目錄下),不過,System.Core.dll里的System.Linq是整個(gè)Linq的核心。在System.Data.Linq.dll里System.Data.Linq命名空間下的DataContext類是Linq to SQL的入口點(diǎn),可以說Linq to SQL一切奇妙之處都來源如此。通過DataContxt我們可以獲取Table對(duì)象(這個(gè)類和DataContext在同一命名空間下),你會(huì)發(fā)現(xiàn)Table竟然是繼承自IEnumerable,那上一篇介紹的那些查詢表達(dá)式都可以應(yīng)用在Table對(duì)象上了,呵呵。

有過使用ORM框架的讀者肯定知道,一般ORM框架都有個(gè)映射,就是將內(nèi)存中的對(duì)象和數(shù)據(jù)庫表做映射,大名鼎鼎的NHibernate是使用XML文件做映射的(我們一般將這種映射稱之為無入侵的),還有ActiveRecord模式一般式在屬性上加Attribute做映射的(一般稱之為侵入式的)。Linq to SQL也不例外,也需要一個(gè)映射,她使用的是侵入式的,所以就需要一些Attribute,這些Attribute放在System.Data.Linq.Mapping命名空間下。

作為微軟大張旗鼓推出的ORM,Linq to SQL目前卻支持Sql Server,這個(gè)未免有些遺憾(所幸的是對(duì)于其他幾種數(shù)據(jù)庫已經(jīng)有開源實(shí)現(xiàn)了),不過放心,看看核心庫里面的命名空間你也許看到了曙光。在System.Data.Linq.dll還有兩個(gè)命名空間:

System.Data.Linq.Provider,這個(gè)命名空間是提供一些Provider模式的接口,由于不同數(shù)據(jù)庫所需要的SQL語句,一些函數(shù)都有一些不同,但是她們的操作卻都大同小異,所以我們可以抽象一個(gè)統(tǒng)一的接口,然后有各個(gè)數(shù)據(jù)庫的實(shí)現(xiàn)(非常奇怪微軟為啥將IProvider接口設(shè)置為internal的,難道他只想他自己一個(gè)人干?)。System.Data.Linq.SqlClient命名空間里放的就是針對(duì)Sql Server的實(shí)現(xiàn)了,按照這個(gè)結(jié)構(gòu),支持所有的數(shù)據(jù)庫都是可以的。

好了,上面對(duì)Linq to SQL的一些組件做了一個(gè)大致的介紹,下面就稍微演示一段代碼。

要做一個(gè)Linq to SQL的case,首先你必須創(chuàng)建一個(gè)映射類,該類映射到數(shù)據(jù)庫表。實(shí)際上映射類和我們?cè)谏弦黄褂玫膶?shí)體類非常相似(確保對(duì)System.Data.Linq.dll的引用,并且對(duì)System.Data.Linq.Mapping命名空間的聲明):

  1. [Table(Name="Users")]  
  2. public class User  
  3. {  
  4. [Column(IsPrimaryKey=true)]  
  5. public int UserId { get; set; }  
  6. [Column]  
  7. public string UserName { get; set; }  
  8. [Column]  
  9. public string Password { get; set; }  
  10. [Column]  
  11. public string BlogName { get; set; }  
  12. [Column]  
  13. public Role Role { get; set; }  

(看到這里你也許會(huì)命名什么叫入侵式了吧,入侵式就是為了達(dá)到目的,對(duì)代碼做了一些改變,比如這里的Table,Column)

User類上面加的Table表示這個(gè)類和一個(gè)表映射,表名為Users,注意,如果表名和類名是一樣的,這個(gè)Name屬性是無需指定的,在屬性或共有字段上加Column表示這個(gè)屬性和數(shù)據(jù)庫表里的字段映射,如果屬性名和數(shù)據(jù)庫表字段名一直只需要加個(gè)Column就夠了,如果這個(gè)屬性在數(shù)據(jù)庫表里是個(gè)主鍵,那么將其IsPrimaryKey設(shè)置為true就可以了。

映射建好了,該是Linq上場(chǎng)的時(shí)候了(我們要從數(shù)據(jù)庫表里查詢出用戶名以”yu”開頭的所有用戶):

  1. //我們給定一個(gè)數(shù)據(jù)庫連接字符串實(shí)例化一個(gè)DataContext對(duì)象  
  2. DataContext dbContext = new DataContext(connectionString);  
  3.  
  4. dbContext.Log = Console.Out;  
  5. //調(diào)用DataContext的GetTable方法,獲取一個(gè)Table對(duì)象  
  6. Table<User> users = dbContext.GetTable<User>();  
  7. //由于Table繼承自IEnumerable,所以,前面所介紹的那些查詢表達(dá)式在這里也使用了  
  8. var result = from user in users  
  9. where user.UserName.StartsWith("yu")  
  10. select user;  
  11.  
  12. //遍歷結(jié)果集  
  13. foreach (var u in result)  
  14. Console.WriteLine(u.UserName); 

很妙吧,沒有了以前重復(fù)又重復(fù)的DbCommand,DbConnection代碼,好像C#直接面向數(shù)據(jù)庫一樣。

在上面的代碼里還有一行特殊的代碼:dbContext.Log = Console.Out;,它會(huì)將你的C#查詢表達(dá)式最后產(chǎn)生的SQL語句輸出來,這樣就更方便你調(diào)試和優(yōu)化了。

本篇只是對(duì)Linq to SQL做一個(gè)大致的介紹,使大家對(duì)Linq to SQL有個(gè)全面的感性認(rèn)識(shí),在下一節(jié)會(huì)用大量的實(shí)例介紹Linq to SQL的方方面面。

這一篇介紹Linq to SQL,如果你已經(jīng)對(duì)Linq to SQL有使用經(jīng)驗(yàn)或者你覺得我說的有地方有錯(cuò)誤,有誤導(dǎo)大家的嫌疑,煩請(qǐng)不要吝嗇你的memory和CPU給我寫個(gè)評(píng)語,我將不勝感激。

【編輯推薦】

  1. LINQ查詢操作經(jīng)驗(yàn)總結(jié)
  2. LINQ遍歷多個(gè)數(shù)組深入剖析
  3. Linq查詢Access數(shù)據(jù)文件淺談
  4. LINQ構(gòu)建框架設(shè)計(jì)學(xué)習(xí)筆記
  5. LINQ重要組成部分簡(jiǎn)介
責(zé)任編輯:佚名 來源: 網(wǎng)易博客
相關(guān)推薦

2009-09-18 09:25:06

LINQ Framew

2009-09-15 13:20:34

LINQ DataCo

2009-09-14 14:17:11

Linq異常處理

2009-09-11 09:41:19

LINQ to SQL

2009-09-17 10:40:22

Linq Lambda

2009-09-07 16:13:14

LINQ to SQL

2009-09-14 15:15:45

LINQ技術(shù)

2009-09-15 13:59:18

LINQ to Dat

2009-09-14 14:20:36

LINQ ORM

2009-09-09 14:20:49

LINQ To Luc

2009-09-08 10:50:20

2009-09-10 17:30:15

LINQ Where子

2009-09-16 10:38:43

LINQ查詢

2009-08-13 11:01:32

LINQPadLINQ工具

2009-09-14 13:14:49

LINQ序列

2009-09-14 14:58:52

LINQ to XML

2009-09-17 13:10:48

linq動(dòng)態(tài)排序

2009-09-14 16:33:55

LINQ To XML

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2023-03-31 14:15:57

SQLORDER BY
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)