日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳細介紹LinqtoSQL

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

創(chuàng)新互聯(lián)是專業(yè)的彭澤網(wǎng)站建設(shè)公司,彭澤接單;提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行彭澤網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

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

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

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

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

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

要做一個Linq to SQL的case,首先你必須創(chuàng)建一個映射類,該類映射到數(shù)據(jù)庫表。實際上映射類和我們在上一篇所使用的實體類非常相似(確保對System.Data.Linq.dll的引用,并且對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; }  

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

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

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

 
 
 
  1. //我們給定一個數(shù)據(jù)庫連接字符串實例化一個DataContext對象  
  2. DataContext dbContext = new DataContext(connectionString);  
  3.  
  4. dbContext.Log = Console.Out;  
  5. //調(diào)用DataContext的GetTable方法,獲取一個Table對象  
  6. Table users = dbContext.GetTable();  
  7. //由于Table繼承自IEnumerable,所以,前面所介紹的那些查詢表達式在這里也使用了  
  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); 

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

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

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

這一篇介紹Linq to SQL,如果你已經(jīng)對Linq to SQL有使用經(jīng)驗或者你覺得我說的有地方有錯誤,有誤導大家的嫌疑,煩請不要吝嗇你的memory和CPU給我寫個評語,我將不勝感激。


網(wǎng)站名稱:詳細介紹LinqtoSQL
文章鏈接:http://www.5511xx.com/article/copgpce.html