微軟企業(yè)庫(kù)學(xué)習(xí)辦法_第1頁(yè)
微軟企業(yè)庫(kù)學(xué)習(xí)辦法_第2頁(yè)
微軟企業(yè)庫(kù)學(xué)習(xí)辦法_第3頁(yè)
微軟企業(yè)庫(kù)學(xué)習(xí)辦法_第4頁(yè)
微軟企業(yè)庫(kù)學(xué)習(xí)辦法_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK /kyo-yo/archive/2010/06/07/Study-Entlib5-First.html 微軟企業(yè)庫(kù)5.0 學(xué)習(xí)之路第一步、差不多入門一、什么是企業(yè)庫(kù)? 企業(yè)庫(kù)包含一系列應(yīng)用程序模塊和核心架構(gòu)。這些高復(fù)用的組件旨在關(guān)心開發(fā)者解決一些共同的企業(yè)開發(fā)問題。 企業(yè)庫(kù)同時(shí)提供高可配置的特性,使我們治理重復(fù)的工作更加容易,例如我們明白的在應(yīng)用的專門多地點(diǎn)發(fā)生的橫切關(guān)注點(diǎn)。包括像日志記錄、緩存、異常治理等。另外,它提供的依靠注入容器能夠簡(jiǎn)化和分解你的設(shè)計(jì),使他們更加可實(shí)驗(yàn)和容易理解,關(guān)心你創(chuàng)建更加高性能的設(shè)計(jì)和各種應(yīng)用。 二、使用企業(yè)庫(kù)的3個(gè)簡(jiǎn)單步驟: 1.引用和配置你

2、需要的程序集。 2.通過企業(yè)庫(kù)配置應(yīng)用。 3.在你的代碼中創(chuàng)建和使用企業(yè)庫(kù)對(duì)象。 三、企業(yè)庫(kù)的好處: 應(yīng)用模塊關(guān)心解決開發(fā)者從一個(gè)項(xiàng)目到另一個(gè)項(xiàng)目面對(duì)的共同問題。他們的設(shè)計(jì)封裝了微軟推舉的做法,這些差不多上基于微軟框架的應(yīng)用開發(fā)。例如,數(shù)據(jù)訪問應(yīng)用模塊提供了對(duì)ADO.NET訪問最頻繁使用的特征。在某些情況下,應(yīng)用模塊還添加了一些基礎(chǔ)類庫(kù)沒有直接提供的相關(guān)功能。 四、企業(yè)庫(kù)的目標(biāo): 1.一致。所有的企業(yè)庫(kù)模塊都堅(jiān)持一致的設(shè)計(jì)模式和實(shí)現(xiàn)方式。 2.可擴(kuò)展性。所有的應(yīng)用模塊包括定義擴(kuò)展點(diǎn),同意開發(fā)人員通過添加自己的代碼定制應(yīng)用模塊的行為。 3.易用性。企業(yè)庫(kù)提供了許多有用性的東西,包括一個(gè)圖形化配置

3、工具,簡(jiǎn)單的安裝過程,完成的文檔和示例。 4.集成。企業(yè)庫(kù)應(yīng)用模塊被設(shè)計(jì)得能夠一起專門好的工作,同時(shí)也被如此測(cè)試過。然而你不必一起使用他們。我們能夠單獨(dú)使用這些應(yīng)用模塊,同時(shí)這些應(yīng)用模塊之間也有些依靠,比如在企業(yè)庫(kù)核心和Unity中的一些通用組件。 上面是企業(yè)庫(kù)的差不多概念,理解了企業(yè)庫(kù)的相關(guān)知識(shí)后,我們能夠開始來安裝企業(yè)庫(kù)了1、下載地址: HYPERLINK /releases/view/43135 t _blank 點(diǎn)我進(jìn)入下載頁(yè)面(不是直接下載),安裝后就能夠使用了。這次5.0相比4.1的最大改動(dòng)確實(shí)是整個(gè)配置工具采納了WPF重新構(gòu)建和實(shí)例化和治理對(duì)象生命周期的全依靠注入的實(shí)現(xiàn),同時(shí)支持

4、VS2008SP1和VS2010,話講盡管這次的配置工具變化挺大的,然而一旦熟悉了就覺得比4.1的好,因?yàn)槟軌蚯逦目匆娒總€(gè)模塊的之間的依靠關(guān)系。一、Unity和對(duì)象生成器的整合 在那個(gè)版本中,用于創(chuàng)建對(duì)象的差不多技術(shù)是一個(gè)單一的依靠注入容器,默認(rèn)的是Unity。你能夠使用容器生成企業(yè)庫(kù)對(duì)象的實(shí)例并注入到其他的對(duì)象。 企業(yè)庫(kù)提供一個(gè)標(biāo)準(zhǔn)的接口從Unity容器中來獲得定義在企業(yè)庫(kù)配置中的對(duì)象的實(shí)例,如SqlDatabase或LogWriter.另外,注入友好的實(shí)例門面處理靜態(tài)門面之外是有效的,因?yàn)殪o態(tài)門面不能用注入,然而為了向后兼容往常的版本而存在。在本版本中的示例中差不多上用依靠注入,然而往常

5、版本中是用的靜態(tài)工廠類和靜態(tài)門面在那個(gè)版本中依舊支持的。對(duì)象生成器,一個(gè)低版本的依靠注入機(jī)制在那個(gè)版本中被歸入U(xiǎn)nity中,在項(xiàng)目中不再需要單獨(dú)引用對(duì)象生成器集。 支持Unity容器,必須引用一個(gè)被包含在企業(yè)庫(kù)中的Microsoft.Practices.ServiceLocation程序集。假如要使用一個(gè)第3方的依靠注入容器,必須直接實(shí)現(xiàn)IServiceLocator接口或者通過適配器實(shí)現(xiàn)。二、阻礙所有模塊的變化: 1.在企業(yè)庫(kù)中要緊修正是使用依靠注入機(jī)制。所用的應(yīng)用模塊以及核心系統(tǒng)差不多上用依靠注入機(jī)制,并使用Unity作為默認(rèn)的依靠注入容器,來創(chuàng)建和治理企業(yè)庫(kù)對(duì)象。 2.自主容器的實(shí)現(xiàn)通過

6、實(shí)現(xiàn)Common Service Locator項(xiàng)目提供的 IServiceLocator 接口來完成。 3.由于錯(cuò)誤配置引發(fā)的錯(cuò)誤將提供更多有用的錯(cuò)誤信息。 4.配置系統(tǒng)公開了一個(gè) fluent接口,用來為單個(gè)對(duì)象或整個(gè)應(yīng)用創(chuàng)建和填充配置源。fluent API使得為各種情景創(chuàng)建配置源更加容易。 5.ConfigurationView類被刪除. 6.一些配置元素有默認(rèn)值,可能不同于往常版本的隱式默認(rèn)值. 7.企業(yè)庫(kù)現(xiàn)在同意你通過另一個(gè)配置文件合成一個(gè)混合配置文件. 8.能夠可通過不同的配置文件讀取不同的配置信息. 9.企業(yè)庫(kù)不支持XAML掃瞄器應(yīng)用程序(XBAP). 10.WmiEnable

7、d標(biāo)志為了像前兼容仍然存在企業(yè)庫(kù)中,然而在5.0中是被忽略的,而且今后會(huì)被刪除. 11.改進(jìn)式的安裝同意你只安裝部分應(yīng)用模塊及配置工具. 12.在往常版本中要做統(tǒng)一集成,必須添加核心企業(yè)庫(kù)的擴(kuò)展和每個(gè)模塊的擴(kuò)展?,F(xiàn)在假如你只需要直接訪問容器,那么只有核心擴(kuò)展是必須的。單獨(dú)模塊將自動(dòng)支持。 舊的功能為了保持像前兼容仍然保留,但差不多不起作用。 13.FileConfigurationSource.Save 的簽名差不多改變,參數(shù)由3個(gè)變?yōu)?個(gè)。 14.快速入門不再包含在主安裝程序中。 三、Breaking變化: 1.企業(yè)庫(kù)現(xiàn)在拋出了一個(gè)配置錯(cuò)誤ActivationException,之前是Sys

8、tem.Configuration.ConfigurationErrorsException。這包括試著解決沒有配置信息錯(cuò)誤的一個(gè)實(shí)例提供者。 2.往常版本在獵取應(yīng)用模塊錯(cuò)誤時(shí)拋出BuildFailedException錯(cuò)誤,現(xiàn)在關(guān)于所有的應(yīng)用模塊都拋出ActivationException 3 .之前的版本,在講一個(gè)空源傳到容器來調(diào)用容器的時(shí)候,會(huì)拋出ArgumentNullException,現(xiàn)在拋出NullReferenceException 4.ObjectBuilder2不再是一個(gè)單獨(dú)的程序集,而是集成到了Unity集合中,在項(xiàng)目中也不需要引用ObjectBuilder2.dll。

9、5.WMI支持差不多從企業(yè)庫(kù)中刪除,除了在logging模塊中的WMI跟蹤監(jiān)聽器。 6.假如你沒有關(guān)閉DbDataReader,可能會(huì)導(dǎo)致隨機(jī)的、專門難在您的代碼中找到的錯(cuò)誤,尤其是當(dāng)你正在一個(gè)由TransactionScope上下文創(chuàng)建的隱式事務(wù)下操作時(shí)。 你必須始終確保您的應(yīng)用程序及時(shí)關(guān)閉DbDataReader,不管是明確的DbDataReader.Close方法關(guān)閉或是逼迫DbDataReader釋放。 7.假如你使用 validator 特性必須引用 System.ComponentModel.DataAnnotations程序集。 8.為FileConfigurationSourc

10、e.Save方法簽名已更改。該方法有兩個(gè)參數(shù),而不是3個(gè)參數(shù) 9.Microsoft.Practices.EnterpriseLibrary.Configuration.Design.dll集合的功能和其他設(shè)計(jì)時(shí)集合被一個(gè)新的集合Microsoft.Practices.EnterpriseLibrary.Configuration.DesignTime.dll代替。 10,性能計(jì)數(shù)器異常從PolicyInjection.CallHandlers移到 PolicyInjection 程序集。 11.包含在Policy Injection Application Block中的CachingCal

11、lHandler有未處理的安全漏洞,差不多從Policy Injection Application Block中移除。 四、配置工具的改變: 1.新的企業(yè)擁有一個(gè)新的GUI庫(kù)和一個(gè)元數(shù)據(jù)驅(qū)動(dòng)的可擴(kuò)展性模。 2.支持向?qū)?3.新的類型選擇。 4.不支持對(duì)依靠策略的Environmental Overrides 。日志模塊處理Categories。 五、緩存模塊變化: 1.緩存清除已被完全重寫的性能優(yōu)化 六、數(shù)據(jù)庫(kù)訪問模塊: 1.ExecuteReader, ExecuteXmlReader, ExecuteScalar, and ExecuteNonQuery方法具有異步版本。 2.包含了專門

12、多新的方法和類同意你提取數(shù)據(jù)作為對(duì)象序列。例如在合適的時(shí)候使用客戶端查詢技術(shù),如LINQ. 3.存在的方法ExecuteReader和新的方法BeginExecuteReader不接收CommandBehavior 參數(shù)。默認(rèn)的當(dāng)調(diào)用這些方法的時(shí)候這些方法 會(huì)自動(dòng)設(shè)置CommandBehavior 屬性到reder中用來關(guān)閉連接直到指定一個(gè)事務(wù)。 七、異常處理模塊: 1.日志異常處理重新使用日志模塊的Log Writer and Trace Listeners 。這在之前版本中不是默認(rèn)設(shè)置。 2.增加一個(gè)功能,通過ExceptionManager.Process 方法接收一個(gè)默認(rèn)值并返回一個(gè)值

13、。 HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html EntLib微軟企業(yè)庫(kù)5.0 學(xué)習(xí)之路第二步、使用VS2010+Data Access模塊建立多數(shù)據(jù)庫(kù)項(xiàng)目現(xiàn)在我就開始進(jìn)入學(xué)習(xí)之路的第二步Data Access模塊,那個(gè)模塊是企業(yè)庫(kù)中被使用頻率最高的模塊,它專門好的封裝了數(shù)據(jù)庫(kù)操作應(yīng)用,為我們進(jìn)行多數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)提供了便利,只需更改配置文件就能夠?qū)iT快的切換數(shù)據(jù)庫(kù)訪問(惋惜依舊要重寫SQL語(yǔ)句,沒法和ORM比)。下面是我在配置企業(yè)庫(kù)的時(shí)候碰到問題,假如沒有碰到能夠略去不看(可能有點(diǎn)小白)注意:此處切換數(shù)據(jù)庫(kù)配置

14、必須是計(jì)算機(jī)中差不多安裝好相應(yīng)的數(shù)據(jù)庫(kù)訪問模塊,如需要進(jìn)行從MS SQL向SQLite數(shù)據(jù)庫(kù)的變更時(shí),計(jì)算機(jī)中必須安裝好SQLite數(shù)據(jù)庫(kù)訪問模塊(在那個(gè)地點(diǎn)我就碰到了那個(gè)問題,原來我機(jī)器上在VS2008開發(fā)時(shí)差不多安裝過SQLite數(shù)據(jù)庫(kù)訪問模塊,然而新裝了VS2010,在VS2010引用對(duì)話框中也能訪問到在VS2008安裝的SQLite(然而在企業(yè)庫(kù)5.0配置器中無(wú)法查看到SQLite),然而發(fā)覺更改企業(yè)庫(kù)的配置文件后無(wú)法訪問SQLite數(shù)據(jù)庫(kù),嘗試了專門多方法都沒用,結(jié)果死馬當(dāng)活馬醫(yī)又重新裝了一遍SQLite數(shù)據(jù)庫(kù)訪問模塊再重新打開企業(yè)庫(kù)配置器就能夠看到SQLite數(shù)據(jù)庫(kù)了(因此請(qǐng)確保在

15、企業(yè)庫(kù)編輯器中能夠查看到要切換的數(shù)據(jù)庫(kù),否則可能導(dǎo)致無(wú)法訪問數(shù)據(jù)庫(kù))??聪聢D: 回歸正題,這次的學(xué)習(xí)由于VS2010公布了,而且企業(yè)庫(kù)5.0也都支持.NET4.0,因此決定企業(yè)庫(kù)的學(xué)習(xí)之路采納VS2010進(jìn)行學(xué)習(xí)(順便熟悉下.NET4的特性,怎么講公司的項(xiàng)目不可能立馬轉(zhuǎn)移到.NET4.0的,現(xiàn)在就當(dāng)練手吧)好了,現(xiàn)在就開始進(jìn)行第2步的學(xué)習(xí)了,首先看下項(xiàng)目的結(jié)構(gòu):項(xiàng)目采納仿MS PetShop架構(gòu),如不了解此架構(gòu)能夠到此查看了解: HYPERLINK /wayfarer/archive/2006/04/14/375382.html t _blank PetShop的系統(tǒng)架構(gòu)設(shè)計(jì)其中DAL和DAL

16、SQLite層對(duì)應(yīng)MS SQL和SQLite數(shù)據(jù)庫(kù),Helper為整個(gè)項(xiàng)目的關(guān)心器現(xiàn)在來具體了解下DAL層在DAL層中引用了Helper,IDAL,EnterpriseLibrary.Common和EnterpriseLibrary.Data這4個(gè)項(xiàng)目,其中Helper項(xiàng)目中有個(gè)DBHelper.cs,用于獵取當(dāng)前的數(shù)據(jù)對(duì)象,其代碼如下(采納了C#4.0的語(yǔ)法特性,默認(rèn)參數(shù),數(shù)據(jù)庫(kù)對(duì)象名默認(rèn)為空,如此則會(huì)調(diào)用企業(yè)庫(kù)默認(rèn)的數(shù)據(jù)庫(kù)對(duì)象,同時(shí)也能夠在調(diào)用的時(shí)候賦值,如此則依照傳遞過來的數(shù)據(jù)庫(kù)對(duì)象名來創(chuàng)建數(shù)據(jù)庫(kù),通過那個(gè)參數(shù)我們將原來需要重載的2個(gè)方法才能實(shí)現(xiàn)合并成了一個(gè)方法): HYPERLINK

17、/kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html l viewSource o view source view source HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html l printSource o print print HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html l about o ? ?01using Microsoft.Practices.Enterpr

18、iseLibrary.Common.Configuration;02using Microsoft.Practices.EnterpriseLibrary.Data;0304namespace EntLibStudy.Helper0506public static class DBHelper0708/ 09/ 獵取數(shù)據(jù)庫(kù)對(duì)象10/ 11/ 數(shù)據(jù)庫(kù)實(shí)例名(默認(rèn)name為空,調(diào)用默認(rèn)數(shù)據(jù)庫(kù)實(shí)例)12/ 數(shù)據(jù)庫(kù)對(duì)象13public static Database CreateDataBase(string name = )1415/return DatabaseFactory.CreateData

19、base(name);16return EnterpriseLibraryContainer.Current.GetInstance(name);171819在DAL層中則引用Helper來獵取數(shù)據(jù)庫(kù)對(duì)象,進(jìn)行數(shù)據(jù)庫(kù)操作,我們現(xiàn)在來看下具體的數(shù)據(jù)庫(kù)訪問類編寫代碼,學(xué)員操作類: HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html l viewSource o view source view source HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Seco

20、nd.html l printSource o print print HYPERLINK /kyo-yo/archive/2010/06/10/Learning-EntLib-Second.html l about o ? ?001using System;002using System.Collections.Generic;003using System.Data;004using System.Data.Common;005using System.Linq;006using System.Text;007008using Microsoft.Practices.EnterpriseL

21、ibrary.Data;009010using EntLibStudy.Model;011using EntLibStudy.Helper;012013namespace EntLibStudy.DAL014015public class StudentService : EntLibStudy.IDAL.IStudentService016017/ 018/ 新增學(xué)生019/ 020/ 學(xué)生對(duì)象021/ 022public int Add(Student student)023024Database db = DBHelper.CreateDataBase();025StringBuilde

22、r sb = new StringBuilder();026sb.Append(insert into Student values(ClassId,SID,Password,Name,Sex,Birthday,IsAdmin);SELECT IDENTITY;);027DbCommand cmd = db.GetSqlStringCommand(sb.ToString();028db.AddInParameter(cmd, ClassId, DbType.String, student.ClassId);029db.AddInParameter(cmd, SID, DbType.String

23、, student.Sid);030db.AddInParameter(cmd, Password, DbType.String, student.Password);031db.AddInParameter(cmd, Name, DbType.String, student.Name);032db.AddInParameter(cmd, Sex, DbType.Int32, student.Sex);033db.AddInParameter(cmd, Birthday, DbType.DateTime, student.Birthday);034db.AddInParameter(cmd,

24、IsAdmin, DbType.Int32, student.IsAdmin);035int id = Convert.ToInt32(db.ExecuteScalar(cmd);036return id;037038039/ 040/ 更新041/ 042/ 學(xué)生對(duì)象043/ 是否成功044public bool Update(Student student)045046Database db = DBHelper.CreateDataBase();047StringBuilder sb = new StringBuilder();048sb.Append(update Student se

25、t ClassId=ClassId,);049sb.Append(SID=SID,);050sb.Append(Password=Password,);051sb.Append(Name=Name,);052sb.Append(Sex=Sex,);053sb.Append(Birthday=Birthday,);054sb.Append(IsAdmin=IsAdmin );055sb.Append( where ID=ID);056DbCommand cmd = db.GetSqlStringCommand(sb.ToString();057db.AddInParameter(cmd, Cla

26、ssId, DbType.String, student.ClassId);058db.AddInParameter(cmd, SID, DbType.String, student.Sid);059db.AddInParameter(cmd, Password, DbType.String, student.Password);060db.AddInParameter(cmd, Name, DbType.String, student.Name);061db.AddInParameter(cmd, Sex, DbType.Int32, student.Sex);062db.AddInPara

27、meter(cmd, Birthday, DbType.DateTime, student.Birthday);063db.AddInParameter(cmd, IsAdmin, DbType.Int32, student.IsAdmin);064db.AddInParameter(cmd, ID, DbType.Int32, student.Id);065return db.ExecuteNonQuery(cmd) 0 ? true : false;066067068/ 069/ 刪除070/ 071/ 學(xué)生ID072/ 是否成功073public bool Delete(int id)0

28、74075Database db = DBHelper.CreateDataBase();076StringBuilder sb = new StringBuilder();077sb.Append(delete from Student );078sb.Append( where ID=ID);079DbCommand cmd = db.GetSqlStringCommand(sb.ToString();080db.AddInParameter(cmd, ID, DbType.Int32, id);081082return db.ExecuteNonQuery(cmd) 0 ? true :

29、 false;083084085/ 086/ 依照學(xué)生ID查詢學(xué)生對(duì)象087/ 088/ 學(xué)生ID089/ 090public Student SelectById(int id)091092Student student = null;093Database db = DBHelper.CreateDataBase();094StringBuilder sb = new StringBuilder();095sb.Append(select * from Student );096sb.Append( where ID=ID);097DbCommand cmd = db.GetSqlStri

30、ngCommand(sb.ToString();098db.AddInParameter(cmd, ID, DbType.Int32, id);099100using (IDataReader reader = db.ExecuteReader(cmd)101102if (reader.Read()103104student = new Student()105106Id = reader.GetInt32(0),107ClassId = reader.GetInt32(1),108Sid = reader.GetString(2),109Password = reader.GetString

31、(3),110Name = reader.GetString(4),111Sex = reader.GetInt32(5),112Birthday = reader.GetDateTime(6),113IsAdmin = reader.GetInt32(7)114;115116117118return student;119120121/ 122/ 查詢所有學(xué)生信息123/ 124/ 125public IList SelectAll()126127List list = new List();128Database db = DBHelper.CreateDataBase();129Stri

32、ngBuilder sb = new StringBuilder();130sb.Append(select * from Student );131DbCommand cmd = db.GetSqlStringCommand(sb.ToString();132133using (IDataReader reader = db.ExecuteReader(cmd)134135while (reader.Read()136137list.Add(new Student()138139Id = reader.GetInt32(0),140ClassId = reader.GetInt32(1),1

33、41Sid = reader.GetString(2),142Password = reader.GetString(3),143Name = reader.GetString(4),144Sex = reader.GetInt32(5),145Birthday = reader.GetDateTime(6),146IsAdmin = reader.GetInt32(7)147);148149150return list;151152153/ 154/ 查詢所有學(xué)生信息155/ 156/ 157public IList SelectAllMapper()158159var list = new

34、 List();160Database db = DBHelper.CreateDataBase();161DataAccessor studentAccessor;162/studentAccessor = db.CreateSqlStringAccessor(select * from Student,163/ MapBuilder.MapAllProperties().164/ Build()165/ );166studentAccessor = db.CreateSqlStringAccessor(select * from Student,167MapBuilder.MapAllPr

35、operties().168Map(p = p.Id).ToColumn(ID).169Map(p = p.Sid).ToColumn(SID).170Map(p = p.Password).WithFunc(f = *)./將密碼轉(zhuǎn)換為*,無(wú)法直接查看171Map(p = p.Name).WithFunc(ToUpperName)./將學(xué)員名稱轉(zhuǎn)換為大寫172Map(p = p.Sex).ToColumn(Sex).173Map(p = p.Birthday).ToColumn(Birthday).174Build()175);176list = studentAccessor.Execut

36、e().ToList();177return list;178179180/ 181/ 將學(xué)員名稱轉(zhuǎn)換為大寫182/ 183/ 184/ 185private string ToUpperName(IDataRecord dataRecord)186187var name = (string)dataRecordName;188return name.ToUpper();189190191public Student SelectBySid(string sid)192193Student student = null;194Database db = DBHelper.CreateDataB

37、ase();195StringBuilder sb = new StringBuilder();196sb.Append(select * from Student );197sb.Append( where SID=SID);198DbCommand cmd = db.GetSqlStringCommand(sb.ToString();199db.AddInParameter(cmd, SID, DbType.String, sid);200201using (IDataReader reader = db.ExecuteReader(cmd)202203if (reader.Read()2

38、04205student = new Student()206207Id = reader.GetInt32(0),208ClassId = reader.GetInt32(1),209Sid = reader.GetString(2),210Password = reader.GetString(3),211Name = reader.GetString(4),212Sex = reader.GetInt32(5),213Birthday = reader.GetDateTime(6),214IsAdmin = reader.GetInt32(7)215;216217218219return

39、 student;220221222223其中的代碼差不多上采納了比較常見的老套路:1、獵取數(shù)據(jù)庫(kù)對(duì)象2、構(gòu)建Command對(duì)象并進(jìn)行執(zhí)行語(yǔ)句及參數(shù)賦值3、通過數(shù)據(jù)庫(kù)對(duì)象調(diào)用相應(yīng)方法執(zhí)行Command企業(yè)庫(kù)在Data Access上幫我們做了比較好的封裝,相當(dāng)于為我們提供了如SQLHelper,OracleHelper類,只只是那個(gè)關(guān)心類轉(zhuǎn)換了一個(gè)個(gè)數(shù)據(jù)庫(kù)的對(duì)象,通過數(shù)據(jù)庫(kù)對(duì)象來對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作(個(gè)人認(rèn)為通過這種方式進(jìn)行操作更加直觀,而且企業(yè)庫(kù)的對(duì)SQL語(yǔ)句的參數(shù)操作方法也專門直觀:AddInParameter,AddOutParameter,GetParameterValue專門好的區(qū)分

40、了參數(shù)的操作,比原來的SQLCommand好多了)假如認(rèn)真看了上面操作代碼的朋友確信發(fā)覺了類中有個(gè)叫SelectAllMapper的方法,那個(gè)方法采納的是企業(yè)庫(kù)5.0中新提供的Accessor進(jìn)行RowMapper來直接為實(shí)體賦值,相比原來的使用reader方式取值賦值更加優(yōu)雅,只要SQL查詢出來的對(duì)象字段和實(shí)體對(duì)象屬性一樣就能夠使用MapAllProperties()方法直接賦值,假如不同的話能夠使用map方法來對(duì)個(gè)不屬性單獨(dú)映射,而且在映射的時(shí)候還能夠使用WithFunc來進(jìn)行進(jìn)一步操作,在代碼中我將密碼進(jìn)行了替換,以“*”的形式展示,同時(shí)把學(xué)員的名稱以大寫的形式展示。(注:更多的企業(yè)庫(kù)Data Access模塊方法使用能夠點(diǎn)擊 HYPERLINK /kyo-yo/archive/2010/06/07/Study-Entlib5-First.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論