色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


很多人一提到Linq就提到操作數(shù)據(jù)庫什么的,其實(shí)操作數(shù)據(jù)庫的只是Linq中的Linq to SQLLinq本身是一個(gè)很大的家族,而且Linq家族極具擴(kuò)展性。從人們一提到Linq就把她當(dāng)作一個(gè)ORM這個(gè)來看,說明廣大程序員對(duì)Linq to SQL期望值很高,高過其他幾種,對(duì)微軟在框架中集成ORM的期望值也很高。從今兒起我將用幾篇來介紹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.dllSystem.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命名空間下。

作為微軟大張旗鼓推出的ORMLinq 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 SQLcase,首先你必須創(chuàng)建一個(gè)映射類,該類映射到數(shù)據(jù)庫表。實(shí)際上映射類和我們?cè)谏弦黄褂玫膶?shí)體類非常相似(確保對(duì)System.Data.Linq.dll的引用,并且對(duì)System.Data.Linq.Mapping命名空間的聲明)

[Table(Name="Users")]
    
public class User
    {
        [Column(IsPrimaryKey
=true)]
        
public int UserId { getset; }
        [Column]
        
public string UserName { getset; }
        [Column]
        
public string Password { getset; }
        [Column]
        
public string BlogName { getset; }
        [Column]
        
public Role Role { getset; }
    }

系列文章導(dǎo)航:

走進(jìn)Linq--Linq橫空出世篇

走進(jìn)Linq-輝煌的背后

走進(jìn)Linq-Linq大觀園

不能不說的C#特性-對(duì)象集合初始化器

不能不說的C#特性-匿名類型與隱式類型局部變量

不能不說的C#特性-擴(kuò)展方法

不能不說的C#特性-匿名方法和Lambda表達(dá)式

不能不說的C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

不能不說的C#特性-迭代器(下),yield以及流的延遲計(jì)算

走進(jìn)Linq-Linq to Objects(上)基礎(chǔ)篇

走進(jìn)Linq-Linq to Objects(下)實(shí)例篇

走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇

走進(jìn)Linq-Linq to SQL How do I(1)

走進(jìn)Linq-Linq to SQL How do I(2)

走進(jìn)Linq-Linq to SQL How do I(3)

走進(jìn)Linq-How do I(4)拾遺補(bǔ)零篇第一節(jié)

走進(jìn)Linq-Linq to SQL源代碼賞析 Table的獲取過程

走進(jìn)Linq-Linq to SQL源代碼賞析之Provider的初始化

走進(jìn)Linq-Linq to SQL源代碼賞析,通過Linq to SQL看Linq


(看到這里你也許會(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上場的時(shí)候了(我們要從數(shù)據(jù)庫表里查詢出用戶名以”yu”開頭的所有用戶)

//我們給定一個(gè)數(shù)據(jù)庫連接字符串實(shí)例化一個(gè)DataContext對(duì)象
DataContext dbContext = new DataContext(connectionString);

dbContext.Log 
= Console.Out;
//調(diào)用DataContext的GetTable方法,獲取一個(gè)Table對(duì)象
Table<User> users = dbContext.GetTable<User>();
//由于Table繼承自IEnumerable,所以,前面所介紹的那些查詢表達(dá)式在這里也使用了
var result = from user in users
           
where user.UserName.StartsWith("yu")
           select user;

//遍歷結(jié)果集
foreach (var u in result)
    Console.WriteLine(u.UserName);

it知識(shí)庫走進(jìn)Linq-Linq to SQL感性認(rèn)識(shí)篇,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 隆尧县| 汝南县| 荃湾区| 榆树市| 甘泉县| 北宁市| 凤凰县| 广元市| 壤塘县| 调兵山市| 吉林省| 沐川县| 汝州市| 石河子市| 高青县| 潮州市| 深泽县| 义乌市| 平度市| 汝城县| 达州市| 聂拉木县| 金堂县| 巩留县| 师宗县| 汝南县| 五台县| 乐亭县| 怀化市| 大宁县| 银川市| 淳化县| 太仆寺旗| 白水县| 来安县| 绥宁县| 张掖市| 广平县| 酒泉市| 通渭县| 开江县|