成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Visual Studio 2008因LINQ成功登頂企業級開發

原創
開發 后端
本文是Visual Studio進化史專題系列文章中,關于Visual Studio 2008的一篇。可以說VS 2008中最引人矚目的是LINQ,是它讓Visual Studio更優秀,更適合企業級開發工作。

【51CTO獨家特稿】2010年4月12日是微軟Visual Studio 2010正式版發布的日子。作為Visual Studio的用戶,您是否還記得自己使用的***個Visual Studio版本?是否還記得CODE出***段代碼時的興奮?是否還記得那無數個尋找Bug的日日夜夜?51CTO開發頻道帶您一起走進Visual Studio歷史,今天我們要介紹的是——Visual Studio 2008。

在.NET平臺中,ADO.NET可以說從一定程序上對數據的數據處理增強了許多。主要功勞在于它把數據的操作和數據封裝成對象來看待,這在很大程序上,使面向對象的程序員生活步入“天堂”。

但比起Java程序員來說,還是生活在“水深火熱”之中,因為ADO.NET,只是把數據的操作當成對象,把查詢出來的數據,封裝在一個集合對象中,從業務邏輯的解度看,這其實是沒有什么意義的,就是數據庫中的數據,與我們應用程序中的業務對象沒有關聯。但Java體系中的Hibernate,它可以使數據對象化,所以這對于.NET程序員來說是望塵莫及的。

隨著時間的推移,2008年,微軟發布了Visual Studio 2008,其中有一項新技術LINQ(當然,LINQ不是在08年橫空出世的,因為它是隨Visual Studio 2008的版本誕生的),其實這個技術的概念并不新,就是可以把數據對象化,即所謂的實體類。雖然概念不新,但這個技術,對于.NET的程序員來說,給開發帶來了不少的福音。也可以說LINQ使.NET的數據開發,邁上了一個新臺階,對企業級開發,提供了強有力的數據層的技術支持。

做個代碼對比吧,好象這樣更有說服力。

拿Northwind數據庫作例子吧。

先看一下其中幾個表的關系:

幾個類

 

這里的Products表是依賴Categories表和Suppliers表,我們對Categories表進行增刪改查。先看一下用ADO.NET來實現:

 

  1. class Program
  2. {
  3. string constr = "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa";
  4. static void Main(string[] args)
  5. {
  6. Program pro = new Program();
  7. pro.Change();
  8. pro.Query();
  9. }
  10. void Query()
  11. {
  12. string sql = "select categoryid,categoryname,description from categories";
  13. DataTable CategoriesDT = new DataTable();
  14. SqlDataAdapter DA = new SqlDataAdapter(sql, constr);
  15. DA.Fill(CategoriesDT);
  16. Console.WriteLine("-------------------ADONET--------------------------");
  17. foreach (DataRow dr in CategoriesDT.Rows)
  18. {
  19. Console.WriteLine("編號:" + dr["categoryid"].ToString());
  20. Console.WriteLine("名稱:" + dr["categoryname"].ToString());
  21. Console.WriteLine("描述:" + dr["description"].ToString());
  22. Console.WriteLine("---------------------------------------------------");
  23. }
  24. }
  25. void Change()
  26. {
  27. string sql = "insert into categories(categoryname,description) values(@categoryname,@description)";
  28. SqlConnection con = new SqlConnection(constr);
  29. SqlCommand cmd = new SqlCommand(sql, con);
  30. cmd.Parameters.Clear();
  31. cmd.Parameters.Add("@categoryname", SqlDbType.NVarChar).Value = "A type";
  32. cmd.Parameters.Add("@description", SqlDbType.NText).Value = "this is a description";
  33. try
  34. {
  35. con.Open();
  36. cmd.ExecuteNonQuery();
  37. }
  38. catch (Exception e)
  39. {
  40. Console.WriteLine("出錯:{0}", e.Message);
  41. }
  42. finally
  43. {
  44. con.Close();
  45. }
  46. }
  47. }

這里實現了查詢和添加,如果做修改和刪除只需要修改Change方法的中的SQL語句和相應的參數就可以了。

下面看一下LINQ To SQL來實現的代碼(LINQ To SQL具體使用在這里不作說明,詳情可查看MSDN相關文章):

 

  1. class Program
  2. {
  3. string constr = "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa";
  4. static void Main(string[] args)
  5. {
  6. Program pro = new Program();
  7. pro.Change();
  8. pro.Query();
  9. }
  10. void Query()
  11. {
  12. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  13. Table categories = northwindDC.GetTable();
  14. Console.WriteLine("---------------------LINQ--------------------------");
  15. foreach (Categories cate in categories)
  16. {
  17. Console.WriteLine("編號:{0}", cate.CategoryID);
  18. Console.WriteLine("名稱:{0}", cate.CategoryName);
  19. Console.WriteLine("描述:{0}", cate.Description);
  20. Console.WriteLine("---------------------------------------------------");
  21. }
  22. }
  23. void Change()
  24. {
  25. //添加
  26. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  27. Categories cate = new Categories();
  28. cate.CategoryName = "MyType";
  29. cate.Description = "this is a LINQ description";
  30. northwindDC.Categories.InsertOnSubmit(cate);
  31. northwindDC.SubmitChanges();
  32. ////修改
  33. //NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  34. //Table categories = northwindDC.GetTable();
  35. //Categories categ = categories.Single(cate => cate.CategoryID == 10);
  36. //categ.Description = "Change description where id equal 10";
  37. //northwindDC.SubmitChanges();
  38. ////刪除
  39. //NorthwindDataContext northwindDC = new NorthwindDataContext(constr);
  40. //Table categories = northwindDC.GetTable();
  41. //categories.DeleteOnSubmit (categories .Single(cate => cate.CategoryID == 10));
  42. //northwindDC.SubmitChanges();
  43. }
  44. }

 

會看到,如果用ADO.NET去實現,我們能非常清晰的看到SQL語法的影子,并且是標準的T-SQL語句。其實在程序中出現SQL語句并不是什么大不了的事,很正常。那么讓我們看看LINQ的實現方式:

 

  1. NorthwindDataContext northwindDC = new NorthwindDataContext(constr);

這行代碼是用一個連接字符串作參數對象,這個對象我們看名字就可以明白,是代表數據庫(當然這個名字是我們命名的,本身DataContext也是數據庫的意思),也就是說,可以把對象notrthwindDC看成一個數據庫本身。

  1. Categories cate = new Categories();  

這行代碼也很好理解,是一個實體類實例化后的實體對象,cate在這里代表一個實體,在數據表中,表是存放數據的載體,并且是存放行相同類型數據記錄的載體,每行記錄,就是一個實體,在這里就是指完整的產品類型實體了。

 

  1. cate.CategoryName = "MyType";
  2. .Description = "this is a LINQ description";

給對象的屬性賦值。

 

  1. northwindDC.Categories.InsertOnSubmit(cate);
  2. northwindDC.SubmitChanges();

然后把新產品類型實體添加到庫對象的Categories(這里是多個產品類型實體的類型集合)對象中。

至于LINQ的修改刪除,都是先找到準備的產品類型實體后進行操作。

通過ADO.NET和LINQ的代碼,我們能看到,在LINQ的代碼中,是找不到T-SQL語句的,我們操作的都是對象,或對象的集合,并且像LINQ中這樣,給對象賦值,操作對象是很常見的,并且也是非常容易理解的,并且也能很好的與我們的業務對象溶為一體,使整個開發過程渾然一體,而不是在ADO.NET中那樣,是通過操作數據庫操作對象,和存放數據的對象來達到對數據的操作。盡管LINQ是封裝了ADO.NET來達到這種效果的,運行效率上說不如ADO.NET,但LINQ的技術則會在我們開發習慣,留下更多的時間來彌補這個缺點。

其實LINQ的優點還表現在表間關系。在前面的圖中,有表間關系,比如Products和Categories,是有一種關系的。同樣在LINQ To SQL中,我們是可能表現到這種關系的。如果構建好了LINQ To SQL的類,則或以這樣使用關系:

cate.Products

這是一個集合,可以調用Add方法,添加多個Products類型。

而每個Products實例對象,則只有一個Categories屬性,只能賦一個Categories類型的值,在這里也體現出表的一(Categories)對多(Products)的關系了。

在這里說明一點,也是難于解決的一點,就是如果我們單從程序中看代碼含意的時候,會被搞混的,看如下代碼:

 

  1. Categories cate = new Categories();
  2. cate.Products
  3. Products produ = new Products();
  4. produ .Categories

 

cate的Products就是一個集合,而produ的Categories則是一個對象,按理produ.Categorie這樣看起來更合適點,但Visual Studio 2008不能這樣處理,因為它是按照數據的表名來生成類的屬性的,所以這里就要分清,那個代表關系中的“一”,那個代表關系中的“多”。

LINQ To SQL僅僅是LINQ 的一部分,LINQ不但對數據進行對象操作,還可能對集合,數組,XML數據進行處理,使對數據的處理達到一種統一,這也是LINQ的功勞。

可以說,LINQ的出現,使VS成為更優秀,更合理的企業級開發工具。

作者簡介

桂素偉,微軟MVP,51CTO專家堂成員。微軟中文技術論壇Visual C#、IT職業規劃談兩個版塊版主,微軟WebCast講師。精通C#,WinForm,ASP.NET,WPF,Windows Mobile等開發技術。山西DotNet俱樂部創始人之一,曾組織多次與微軟合作組織活動,并多次組織山西DotNet俱樂部線上線下活動。

[[9856]]

 

 

【編輯推薦】

 

  1. Windows 7下Visual Studio 2008安裝詳解
  2. Visual Studio 2008中三大問題的解決方法
  3. 不能不知的VS2008技巧與便捷
  4. 對VS2008簡介與日常使用
  5. 詳細分析VS2008專業版相關功能
責任編輯:楊鵬飛 來源: 51CTO
相關推薦

2010-08-04 15:20:15

Flex企業級開發

2011-12-06 14:02:27

企業級移動開發

2009-12-03 13:47:13

Microsoft V

2009-12-14 20:13:57

IBM

2012-05-15 15:21:29

企業級

2013-12-08 21:16:21

BaaS企業級移動移動信息化

2017-03-21 10:22:09

移動開發

2009-06-23 15:02:56

JSF和AJAX

2013-08-01 00:00:00

開發企業級App出路

2009-06-23 14:55:43

AJAX和JSF

2009-12-16 15:44:20

Visual Stud

2009-12-18 13:39:40

Visual Stud

2009-12-17 15:38:21

Visual Stud

2010-02-23 10:39:43

Visual Stud

2009-07-24 13:37:29

SilverlightSilverlight

2020-07-06 07:50:13

Redis開發運維

2014-09-24 13:32:41

企業號

2012-06-14 13:26:22

2010-04-07 08:55:00

OSGiSpring

2023-02-15 18:12:43

開發企業級CLI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站在线播放 | 国产精品不卡视频 | 国产在线一区二区 | av网站在线看 | 精品国产一二三区 | 久久久久国产一区二区三区四区 | 老司机深夜福利网站 | 户外露出一区二区三区 | 日本一二区视频 | 亚洲综合字幕 | 中文字幕乱码一区二区三区 | 亚洲精品高清视频 | 亚洲欧美激情精品一区二区 | 成人教育av | av官网在线 | 国产成人一区二区三区 | 性高湖久久久久久久久 | 午夜影院 | 毛片在线看片 | www.国产精品 | 欧美激情在线播放 | 一级片在线视频 | 99久久精品免费看国产免费软件 | 浮生影院免费观看中文版 | 在线只有精品 | 久久成人精品视频 | 国产免费一区二区三区 | 国产欧美日韩一区 | 国产乱码精品1区2区3区 | 国产有码| 日韩黄色小视频 | 天天干夜夜操 | 亚洲国产一区二区三区四区 | 亚洲综合五月天婷婷 | 在线一区| 日韩中文字幕高清 | 黄色片在线免费看 | a视频在线 | 国产精品久久一区二区三区 | 国产激情在线 | 亚洲三区在线观看 |