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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.