LinQ to SQL四大護(hù)法剖析
在向大家詳細(xì)介紹LinQ to SQL之前,首先讓大家了解下LinQ to SQL四大護(hù)法,以后全面介紹LinQ to SQL。
我們來(lái)看看LinQ to SQL,就是對(duì)數(shù)據(jù)庫(kù)的查詢,以前叫做DLinQ。經(jīng)??吹絃inQ那到底是什么呢?他是Language Integrated Query的縮寫,以一種類似SQL語(yǔ)句的形式來(lái)對(duì)對(duì)象進(jìn)行操作的編程方法。
在使用到LinQ時(shí)也會(huì)用到以前提到過(guò)的一些特性,如:匿名類型,自動(dòng)化屬性等等。
LinQ to SQL是一種ORM,它允許你通過(guò)編寫.NET程序來(lái)控制或操作關(guān)系型數(shù)據(jù)庫(kù)以達(dá)到查詢的效果。你可以使用LinQ來(lái)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),也可以通過(guò)其進(jìn)行數(shù)據(jù)的更新和添加。同時(shí)LinQ to SQL也支持事務(wù),試圖以及存儲(chǔ)過(guò)程等等,通過(guò)VS2008(現(xiàn)在使用的是beta版本,下同)的LinQ to SQL設(shè)計(jì)器我們可以很容易定義一些實(shí)體類,我們可以通過(guò)添加一個(gè)新項(xiàng)來(lái)加入.dbml文件,并從數(shù)據(jù)庫(kù)服務(wù)器窗口拖出數(shù)據(jù)表。
我們定義兩個(gè)實(shí)體類,Artile和Category,我們也可以把存儲(chǔ)過(guò)程拖到方法的窗口中,由于我們的存儲(chǔ)過(guò)程和數(shù)據(jù)表的命名可能帶有前綴或其他標(biāo)識(shí),我們可以查看屬性窗口將他們的name屬性改掉我們?nèi)菀鬃R(shí)別的名稱。我們打開Designer.cs那個(gè)文件看一下,是不是生成了幾個(gè)類,其中一個(gè)最重要的是以DataContext為后綴那個(gè)類(他以當(dāng)前dbml文件名加DataContext為名稱的類),他是這個(gè)LinQ的上下文,我們可以通過(guò)他來(lái)執(zhí)行我們的操作。而上面兩個(gè)是外鍵關(guān)系,他還生成了一個(gè)關(guān)系類,而且在Category類中好有一個(gè)Article的集合,在Article中也有一個(gè)關(guān)聯(lián)屬性,在賦值時(shí)還會(huì)對(duì)鍵值類型進(jìn)行判斷。
下面我們來(lái)看看實(shí)際應(yīng)用的一些例子(LinQ to SQL四大護(hù)法<SELECT/INSERT/UPDATE/DELETE>):
1.從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)<SELECT>
- //三個(gè)重載(),(string connectionString),(IDbConnection connection)
- ItLivesNetDataContext cntx = new ItLivesNetDataContext();
- //這個(gè)也可以在初始化ItLivesNetDataContext實(shí)例時(shí)直接進(jìn)行初始化。
- cntx.Connection = new SqlConnection
(ConfigurationManager.ConnectionStrings[0].ConnectionString);- var articles = from a in cntx.Articles
- where a.CategoryID == 1
- orderby a.PostDate descending
- select a;
上面的代碼將返回?cái)?shù)據(jù)庫(kù)Articles表中類型ID為1的所有數(shù)據(jù),并將其按發(fā)布時(shí)間進(jìn)行降序排列。其中articles其實(shí)是IEnumerable<T>的實(shí)例,這個(gè)例子的T就是Article實(shí)體類。
2.將新數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中<INSERT>
- //插入新類型C++
- Category category = new Category
- { CategoryName="CPLUSPLUS",IsActived=true, ParentID = 1 };
- //插入新文章,類型為C++
- var article = new Article { Subject = "C++入門", Author="網(wǎng)魂小兵" };
- category.Articles.Add(article);
- cntx.Categories.Add(category);
- cntx.SubmitChanges();
3.更新新數(shù)據(jù)<UPDATE>
- Category category = cntx.Categories.Single(p =>
p.CategoryName.ToUpper() == "CSHARP");- category.IsActived = true;
- category.Description = "UPDATE CSHARP!";
- cntx.SubmitChanges();
4.刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)<DELETE>
- var delArtiles = from s in cntx.Articles
- where s.CategoryName == "CPLUSPLUS"
- select s;
- cntx.Articles.RemoveAll(delArtiles);
- cntx.SubmitChanges();
以上是LinQ to SQL四大護(hù)法的例子,例子很簡(jiǎn)單一看就能夠懂就不多解釋了。在數(shù)據(jù)庫(kù)中我們還經(jīng)常要用到檢索數(shù)據(jù)庫(kù)的方法那就是分頁(yè)檢索數(shù)據(jù)庫(kù),然而在比較大的數(shù)據(jù)時(shí)我們往往會(huì)用到存儲(chǔ)過(guò)程來(lái)完成這一職業(yè)。
【編輯推薦】