在剛開始使用中就碰到問題:按照官方的方法配置,總是不能編譯時自動生成數據訪問層代碼(其中一種,也可使用命令行自己生成,下面介紹)。本文只要介紹了這兩種配置subsonic的方法。
1.配置方法
自動在臨時文件夾生成的官方方法如下:
(1)修改web.config
在web.config裏configuration節下面加入一下內容:
2 <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
3 </configSections>
4 <appSettings/>
5 <connectionStrings>
6 <add name="football" connectionString="Data Source=ERICK;Initial Catalog=polan2;Persist Security Info=True;User ID=sa;Password=sa" providerName="System.Data.SqlClient"/>
7 </connectionStrings>
8 <SubSonicService defaultProvider="football">
9 <providers>
10 <clear/>
11 <add name="football" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="football" generatedNamespace="football"/>
12 </providers>
13 </SubSonicService>
然後在system.web節內加入buildProviders配置節:
2 <!--########################## SubSonic Build Provider ###############################-->
3 <!--This will NOT WORK in Medium Trust-->
4 <buildProviders>
5 <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/>
6 </buildProviders>
7 <assemblies>
8 <add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
9 </assemblies>
web.config的設置結束。
(2)添加對subsonic.dll文件的引用
右鍵項目--添加引用--瀏覽
(3)在app_code文件下加入subsonic.abp文件
這裏subsonic.abp是根據buildProviders配置節裏面的extension=".abp"而來, .abp代表application build provider,目的是爲了在編譯時自動生成數據訪問層,這些代碼放在了框架的臨時文件夾裏面。
(4)編譯之
我用的vs2008的webapplication,在上述三步後,發現vs2008依然不能找到我自己創建的命名空間以及相應的類,而且從編譯時間上也能斷定項目並沒有按正常情況自動創建數據訪問層的類代碼。非常費解,今天又用vs2005 和2008分別對subsonic在website和webapplication下的配置進行了測試,發現上述方法只能在vs2005下的website中正常使用,對於其他三個項目,則只能使用另一種方法,IDE的外部工具:
(1)添加visual studio外部工具
打開vs2005或者2008,菜單-工具-外部工具,添加外部工具對話框如下:
命令行處找到subsonic的命令行工具(位於安裝文件下);參數的最後一個空格後面的是要輸出的目錄(自己選擇);
(2)運行SubsonicTool外部工具
然後菜單-工具下就有一個subsonictool的工具按鈕,直接點擊,就會彈出:
輸入相應的目錄,ok就能在generated文件夾下生成一系列數據訪問層的類代碼。結構如下:
注意:在webapplication項目中,不要將這些代碼直接生成在自己創建的app_code中(默認下沒有這個文件夾),會出現依然找不到命名空間和相應類的問題,最好自己在項目下直接建一個Generated文件夾作爲放置數據訪問層類代碼的目錄。
2.subsonic使用
這裏對它的使用就不做太多介紹,如果以後遇到一些問題,也會記下來分享。只舉個簡單的例子:
在一個頁面中放置一個gridview,id爲productGrid,在後置代碼pageload裏面寫入:
2 productGrid.DataBind();
兩行代碼即可完成。Product是根據數據庫自動生成的代碼,真正項目中要想使用,必須要通過partial class的方法把這些類進行相應的擴展,留在以後再說。
Subsonic 的實踐安裝方法:
(1) 安裝SubSonic2.03(在Vista系統中要使用Administrator帳戶;
(2)逐個編譯SubSonic tools ,使得VS 2005中安裝了Add-in工具;
(3)新建一個visual studio 2005的工程,數據庫用Sql Server2000(建議用2005版本),如果是Web應用程序按F5可以產生Web.config,如果是WindowsForm或者Dll應用程序,手動添加App.config(具體修改串解釋,以下詳細說明)
(4)添加引用,瀏覽添加SubSonic.dll(SubSonic安裝目錄下),添加System.configuration引用和System.Web(不曉得爲什麼添加這個?)
(5)新建一個DAL文件夾,在DAL上右擊,進入SubSonic菜單,選擇Generate Multiple Files
Web.config或App.config參數詳解(紅色字體標識):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="SubSonicService"
type="SubSonic.SubSonicSection, SubSonic"
allowDefinition="MachineToApplication"
restartOnExternalChanges="true"
requirePermission="false"/>
<section name="dataConfiguration"
type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings,
Microsoft.Practices.EnterpriseLibrary.Data" />
</configSections>
<appSettings/>
<connectionStrings>
<clear/>
<add name="數據庫聯接名,示例:NorthwindConnection" connectionString="Data Source=.;Initial Catalog=想要生成實體類的數據庫名,,示例:Northwind;Integrated Security=True"/>
</connectionStrings>
<SubSonicService defaultProvider="提供程序名,會作爲類的前綴,示例:Northwind">
<providers>
<clear/>
<add name="提供程序名,會作爲類的前綴,示例:Northwind" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="數據庫聯接名,示例:NorthwindConnection"
generatedNamespace="類的命名空間,示例:Northwind"
/>
</providers>
</SubSonicService>
</configuration>
特別: 解釋說明相同的需保持相同名字