SubSonic 安裝與使用


    SubSonic簡介
    SubSonic配置
    利用sonic.exe來生成代碼
    通過Substage來生成代碼
    簡單操作示例

1.SubSonic簡介

   一句講完就是:SubSonic就是一個ORM開源框架。作者是Robe Conery,用c#語言寫的. SubSonic遵循了Ruby on Rails的一些準則,比如在建表時一些約定(建議每個表都加CreatedOn[Datetime],CreatedBy[nvarchar],ModifyOn[DateTime],ModifyBy[nvarchar])....,這些詳細信息可以去參考Ruby on Rails.

    該ORM框架可以支持多種數據庫,包括sql server,mysql,oracle,sqlite...,最新版本是v3.0, PS:我本次測試還是用v2.2

2.SubSonic配置

  我的測試環境:window 7 + sql server 2005 + vs 2010 + subsonic 2.2

  配置之前,先Download Subsonic, 官方網站 MS打不開,我這裏公開另一個鏈接,可以去下載:https://github.com/subsonic/SubSonic-3.0,github這個網站做得很像SVN一樣 :)

   先看看Download下來之後的目錄:

根目錄下包含了主dll,SubCommber目錄下包含一個sonic.exe的可執行文件(基於命令行的),用來生成代碼的,另一個SubStage目錄下包含一個SubStage的UI工具,可以藉助UI來生成代碼。

    預先準備數據:

       1:我們在利用IDE先新建一個項目,並引用subsonic.dll

       2:建立一個測試數據庫(我這裏用的是sql server 2005),我只建立一個表來測試

      

create table Customer(ID int not null identity(1,1) primary key,[Name] nvarchar(30),[Sex] bit)


       3: 爲生成代碼做準備,第一步在項目中引入dll之後,更改web.config配置,我這裏直接貼出來算了,先看第一段,這個主要就是一個section,該section由subsonic.dll的SubSonicSection來處理( PS:SubSonicSection是v2.0之後纔有的,以前v1.0的時候命名爲:SectionService)

       注意一點:providers中的connnectionStringName必須要與web.config中的connectionstrings中的name保持一致,這樣纔會根據該連接串指向的數據庫來生成對象。

<configSections> <section name="SubSonicService" type="SubSonic.SubSonicSection,SubSonic" allowDefinition="MachineToApplication" restartOnExternalChanges="true" requirePermission="false"/> </configSections> <SubSonicService defaultProvider="SqlDataProvider"> <providers> <add name="SqlDataProvider" type="SubSonic.SqlDataProvider,SubSonic" connectionStringName="StevenConnectString" generatedNamespace="Steven.DAL"></add> </providers> </SubSonicService> <connectionStrings> <add name="StevenConnectString" connectionString="server=steven;initial catalog=steven;user id=sa;password=123;" providerName="System.Data.SqlClient"/> </connectionStrings>

    再看看第二段配置,在說這個配置之前,先說下.abp , SubSonic就是根據該abp文件來生成數據庫操作對象的,該abp文件中其實也就是一個基本文本的格式,我只知道它的二種用法:

       a: * 表示生成指定數據庫中所有table

       b: 若不需要生成所有table,可以列出要生成的table名稱(每一行一個table name)

   

<compilation debug="true" targetFramework="4.0"> <buildProviders> <add extension=".abp" type="SubSonic.BuildProvider,SubSonic"/> </buildProviders> </compilation>

    這個決定了編譯器在build的時候,對.abp文件的一個處理方式,具體工作都扔給SubSonic.BuildProvider去做, 其實BuildProvider根據我們配置的 .abp文件來生成代碼.

    講了這麼多的 .abp,先看一圖

 

  這個abp文件很簡單,內容就一個 ”*“ 號,用來生成所有操縱表的對象,其實我也就一個Customer表, ps:  該abp文件放到app_data下正好利用了編譯機制(編譯器在build時會對該文件夾進行build)這樣纔會生成代碼.

3: 利用sonic.exe來生成代碼

  有這一步的原因是因爲我在做build的時候遇到一些問題,代碼沒有生成成功(官方給出的解釋是Trust Level原因,Subsonic必須在一個full trust宿主環境中,我試着修改trust level,

包括修改web.config, 還有利用.net framework configuation工具來修改....,到現在還沒弄出來,有會的朋友知會我一聲 :)

  所以我乾脆用sonic.exe(上面有提到)命令來工具來生成代碼, vs ide工具有一個功能就是可以把外部工具給加載到“工具”菜單中來,並可以爲這些外部工具提供一些輸入參數,看圖:

    通過 "工具->外部工具..." 打開.

添加成功之後,可以看得,“工具”菜單下多了一個menu item,如下圖:

 直接執行sonic.exe命令,

這裏一個參數 generate /out 表示生成代碼,有關sonic.exe命令的其它參數可以直接運行sonic.exe 來查看。

確定之後,會根據.abp文件中包含的內容來生成DTO對象,PS:注意一點就是生成之後,在vs solution中是看不到的,必須要include進來纔行。

4: 通過Substage來生成代碼

  這個GUI工具生成代碼更強大,所以我單獨拿出一節來介紹,先看看它的整體UI,

   一句話簡單介紹:

      Substage根據project中的provide來生成代碼,而provider又必須利用數據庫連接串來找指定的數據庫

    生成代碼步驟:

    a: firstly, 先new project

    b: 創建一個連接串,如下圖:

 

    c: 建立一個provider,並利用b中連接串,如下圖:

   

   d:最後就是生成代碼了,點擊toolbar中的generate code來生成,如圖

 

        可以看出來,除了根據表名生成實體外,還額外多了幾個類,SPs.cs是處理存儲過程的,Customer是操作Customer表的,該類中還幫我們生成一個CustomerCollection集合類,這個功能相對於其它的ORM框架是沒有的,:),  AllStruct.cs包含全部表結構. 具體詳細內容需要自己慢慢去體會。

    接下來看看這個工具最特殊的地方,接着生成代碼之後,我們能過GUI工具Invoke一下我們的數據庫結構,使所有表什麼的...能夠在這個左邊列表菜單中顯示出來,如下操作:

  有了表之後,該工具提供了一個叫scaffolds(支架)的功能,我們可以通過該功能可以直接對該表進行CURD操作,來見證一下:

 ps:  操作之前,需要先選擇到“表”,再點擊 Scaffolds tab 來看看, 它自己幫我們生成UI,我們可以直接利用UI來添加一個數據, 當然添加完成之後,還會一個展示數據的list界面,

    這個不錯吧,除了這些之後,還可以用把該工具當MSDN一樣使用,通過Api Reference來查看

    還有其它一些功能,就不一一介紹了,需要自己去發現。

5:簡單操作示例

  所有工作進行完之後, 我寫了一個非常簡單的示例來驗證一下它的正確性,代碼很簡單

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindData(); } } private void BindData() { GridView1.DataSource = Customer.FetchAll(); GridView1.DataBind(); } protected void btnAdd_Click(object sender, EventArgs e) { string custName = TextBox1.Text; Customer model = new Customer(); model.Name = custName; model.Sex = chkSex.Checked; model.Save(); BindData(); }

  我通過Save()方法新加一個customer,然後FetchAll()取所有數據進行展示.非常簡單,當然還一些其它方法如FetchByParameter,Delete,Select......這裏不都介紹了,這篇文章主要目的是體驗,:)

   總結一下:Sobsonic只是衆多ORM框架中r的一個,具體應用可以根據項目需要而定,我在現在的項目中暫時還沒有發現Subsonic有很大的性能問題,相於其它ORM,我更喜歡的它的簡單,而且是開源的 :),有興趣的朋友可以多交流交流!


備註: 在Win7 下安裝SubSonic可能會出現Error Code2869,這是權限不夠造成的
解決方案: 以管理員權限運行Command Prompt,轉到你所下載的SubSonic路徑,輸入Your_SubSonicName.msi即可以管理員權限安裝SubSonic
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章