C# .NET更智能的數據庫操作封裝項目


  前面兩篇文章介紹了框架的思路及里面大概的實現過程,那時候忘記上傳項目,就補發一下。順便介紹下框架使用方式,並分析下框架使用的優缺點。

  先發一下前兩章的鏈接

  篇一:http://www.cnblogs.com/jnxzk/p/6443192.html

  篇二:http://www.cnblogs.com/jnxzk/p/6493054.html

  進入正題:

  之前說了,一開始做的時候是為了方便數據庫的訪問,其實數據庫的訪問,最重要的就是sql語句。因此,我的框架並沒有創造什么語法,使用風格是類似sql語法,因為我想,如果創造語法,那么使用的人還需要先學習怎么使用,而完全sql風格,那就不用說了,大家都學過了,一看明了的。

  並且為了更進一步封裝方法,有點類似ORM框架,封裝四個方法 Select,Update,Delete和Insert擴展方法,這個直接可以在模型對象上就可以點出來的方法,所以也比較方便。框架支持sql 和 mysql,其他的數據庫需用戶自己擴展。

 

  首先,是配置。使用框架需要配置。

  一:數據庫使用都有配置文件,只要在配置文件加上connectionStrings,這個節點里存放一個是數據庫名字,連接串和數據庫類型。

  例:

<add name="SQL" connectionString="Data Source=CN-20161106HMJI;Initial Catalog=ShopInfo;Integrated Security=True" providerName="SQL"/>

  這里要注意的是最前面的name和最后的數據庫類型。

  因為框架支持多數據庫,因此name是用來區分正使用哪個數據庫的關鍵,並且在其他還會用到,下面再說。第二個是provideName,這是數據庫類型,類型只能是靜態類DBType中的靜態字段,目前只有SQL和MySQL,這是用來區分數據庫的。如果使用了配置,那在應用程序一開始執的行時候調用 Config.Start()方法即可。

  二:模型的類上,可以加上兩個特性,Connection 與 OConnection。

    這兩個特性就是為四個簡便的擴展方法而用。Connection構造函數有一個參數,這個參數就是上邊說到很重要的name。要跟你要將模型保存到哪個數據庫,上邊就填寫哪個數據庫的name。

    而OConnection是為了更智能性,用戶可以通過配置,來一次性定義保存模型到哪個庫中。這個配置文件配置在appsettings中。key用戶自己命名,那value就是上邊的數據庫名name。使用這個配置后,在應用程序一開始時候加上Config.ConfigConnection(key);key就是你剛剛那個配置里的key里的值。

    模型類上使用其中的任意一種。

  三:這個是必須的,在模型里,作為主鍵的屬性上邊,加上PKey特性(如果一張表有多個,那么都加上),這個很顯然的功能。

  四:異常的設置,如果執行階段的發生的異常需要保存,那就寫個無參無返回值的靜態方法,使用DBException.AddEvent += 你的方法名   即可。

 

  上面對數據庫的配置好處就是,如果數據庫改變了,或是原本是mysq,現在升級成sql,那配置里修改即可,代碼都不需要動。

 

好了,配置完成了。來介紹下使用方式,按上邊看,就知道了有兩種使用方式。

 

  第一種較為簡單,使用Select,Update,Delete和Insert擴展方法,都要先實例模型對象,然后在模型對象上使用方法。

  Select,Delete,Update使用的要求是主鍵要有值,這樣才能找出你要操作是哪個是吧。Update不會更新主鍵部分;Insert就沒什么要求,所有字段有值就可以。

  這幾個方法都有一個可選參數,就是操作的字段(除了Delete)。在使用的地方要引用該類庫。

 

  第二種方式:

  使用DBHelper,在使用后要調用dispose,或者using來釋放空間。

  DBHelper里有幾種最終執行的方法,比如執行影響行數,獲取List,等等。這里最重要的是ExcuteString方法。

  DBHelper因為是鏈式的,因此有先后執行順序,使用方法的順序是:

  helper先調用Connection(string name)獲取數據庫(數據庫name) 或者createConnection(string Name, string ConnectionString, string type) 創建數據庫。

  其次就是先使用ExcuteString()

  最后是最后執行的操作,ToList,ToModel,ExcuteResult等等,在項目里有注釋各個功能。

  ExcuteString需要解釋下,這里面其實是拼接字符串,也同樣是鏈式編程。使用格式如下:

  (Sleect | Delete | Insert | Update) + Form(可選參數,給視圖,存儲過程使用) +AndPKey(補充主鍵約束,如果是模型中的表,使用這個就可以了,如果多表那就使用AndMulTable,自動補充表間關聯字段) + (where 條件 | or 條件 | where 不等 條件 | or 不等條件) + OrderBy(可選參數) + Top(可選參數)

  例子:

helper.ExcuteString(o => o.Select<PlaceInfo>().AndNIn("SAddNo", o1 => o1.Select<PlaceInfo>().Top(5)).Top(5)).ToList<PlaceInfo>();

  支持嵌套查詢,因此做最常用的分頁也不是難事。上邊這個是分頁的操作,如果把兩個top里面數值改成需要傳的參數,就可以改造成任意的頁了,項目中也寫好了注釋。

 

  好了,使用方式就到此為止,來分析下框架吧。

  首先,已經屏蔽掉所有底層的東西了。

  第二,因為里面大量的使用反射,時間消耗自然是很慢的,所以設置反射的緩存是必須的,不過緩存不是對數據,是在反射,還有搜索主鍵的地方,在使用久后,里面對各個模型類都已經有了緩存,使用就不會有問題了。

  第三,對多種數據庫也只使用一套模型,如果是EF,那一套模型只對應一個數據庫,如果下次更換數據庫,那不是得重新的做。

  第四,擴展部分。之前文章里說過,框架是極大的支持開閉原則。因此,如果以后要擴展數據庫,那只要再DBType里多增加一個你的字段比如 Oracle,然后底層的實現方法,新建三個實現IDBCode ,IDBExcute,IDBInstance接口的類,在三個類下實現那些方法。好了,這樣就擴展了一個數據庫。這時候如果要用這個數據庫,只需要在配置處修改你想保存新的數據庫中,其他代碼可以一個字都不要動。

  缺點是:

  第一,沒有可視化工具。他們工具都可以自動生成,這個目前沒有,如果等我學校畢業后,有大量時間投在編代碼上時,我就可以拿出許多時間寫了。

  第二,鏈式編程,還沒辦法實現像EF這樣,其實鏈式最厲害的應該是拼接,拼接如果能夠做到前后順序無關,我覺得是極大的提升。

  其他缺點,就留給讀者去發現了。

 

  好了,對數據庫的封裝結束了,框架是EasyDb類庫中。其他地方要使用就引用該類庫就可以了,里面還有一個是我作為測試的控制台程序。

   鏈接是:http://files.cnblogs.com/files/jnxzk/EasyDbSolution.rar

  有什么問題可以在下邊評論~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM