前面已經提到過了本框架的由來,時至今日該框架已經和最初版本有了天壤之別。因為仍有部分程式碼是採用原有的框架,所以本框架也算不上原創,只是在原有的基礎上不斷的改進,所以希望瞭解此框架的人不要過多的指責。
一. 配置資料庫連線
在該框架中自定義了一個配置檔案Database.config, 這個配置檔案的根節點為<databaseList></databaseList>, 其可以包含多個子節點用於配置資料庫的配置連線,具體程式碼如下:
<?xml version="1.0" encoding="utf-8" ?> <databaseList> <database name="JooShowGit"> <connectionString>Server=127.0.0.1;database=JooShowGit;user id=sa;Password=000000</connectionString> </database> </databaseList>
該配置檔案可以包含多個<database></database>的節點,該配置檔案可以通過反序列化的形式轉化為一個集合物件,最終可以通過database的name熟悉來獲取一個資料庫的Connection物件. 但是這裡得注意一下,如果配置了多個資料庫的連線,只能配置一種型別的資料庫,比如MSSQL,Oracle,MySQL,Sqlite 等,不能配置混合的資料庫連線,這裡是有待改進的部分。在原有的框架中 name="JooShowGit(自定義)" 只是一個唯一識別符號,在系統中查詢的時候更加方便,但是改進之後可以用於關聯實體與資料庫連線的關係。
二. 如何載入配置檔案
配置好如上的的資料庫連線之後,我們並不是自己去讀取配置然後建立連線,我們需要在web.config 或者app.config檔案中配置如下程式碼:
<appSettings> <add key="DatabaseListFile" value="/Configs/Data/Database.config"/> <add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/> </appSettings>
這段程式碼告訴我們從何處去載入配置檔案,DatabaseListFile 指定了資料連線配置檔案的地址,在應用程式啟動之後會自動尋找這個地址載入該配置到快取,內部實現是通過反序列化為物件集合,快取的是物件資料。
三. Command 配置檔案
我們都知道在.NET資料庫連線操作的時候都有一個command物件,用於執行命令。在框架中所有的SQL語句都配置在配置檔案中,之前文章也提到過,我是非常反感這種配置的,這裡為了從基礎部分講到使用以及改造過程,這裡還是先介紹一下其作用。
<?xml version="1.0" encoding="utf-8" ?> <dataOperations> <!--User_Base所有欄位的修改--> <dataCommand name="User.UpdateAllBase" database="JooShowGit" commandType="Text"> <commandText> <![CDATA[ UPDATE [User] SET [UserName] = @UserName ,[Email] = @Email ,[Password] = @Password ,[RegisterDate] = @RegisterDate ,[RegisterIp] = @RegisterIp ,[Status] = @Status ,[RegisterApplicationID] = @RegisterApplicationID ,[ActiveDate] = @ActiveDate ,[LastLoginDate] = @LastLoginDate ,[LastLoginApplicationID] = @LastLoginApplicationID ,[RegisterSource] = @RegisterSource ,[AuditStatus] = @AuditStatus ,[IsLogin] = @IsLogin ,[LoginCount] = @LoginCount ,[LastLoginIp] = @LastLoginIp ,[AuditUser] = @AuditUser ,[AuditDate] = @AuditDate ,[IsDeleted] = @IsDeleted ,[OLDApplicationID] = @OLDApplicationID ,[OLDID] = @OLDID ,[RowGuid] = @RowGuid ,[IMNum] = @IMNum ,[Phone] = @Phone ,[IsEmailValidate] = @IsEmailValidate ,[IsPhoneValidate] = @IsPhoneValidate ,[StepNum] = @StepNum ,[SaleCode]=@SaleCode ,[PasswordIM]=PasswordIM ,[ActiveIP]=@ActiveIP ,[CompanyType]=@CompanyType Where UserId=@UserId ]]> </commandText> <parameters> <param name="@UserId" dbType="Int32" direction="Input"/> <param name="@UserName" dbType="String" direction="Input"/> <param name="@Email" dbType="String" direction="Input"/> <param name="@Password" dbType="String" direction="Input"/> <param name="@RegisterDate" dbType="DateTime" direction="Input"/> <param name="@RegisterIp" dbType="String" direction="Input"/> <param name="@Status" dbType="Int32" direction="Input"/> <param name="@RegisterApplicationID" dbType="Int32" direction="Input"/> <param name="@ActiveDate" dbType="DateTime" direction="Input"/> <param name="@LastLoginDate" dbType="DateTime" direction="Input"/> <param name="@LastLoginApplicationID" dbType="Int32" direction="Input"/> <param name="@RegisterSource" dbType="Int32" direction="Input"/> <param name="@AuditStatus" dbType="Int32" direction="Input"/> <param name="@IsLogin" dbType="Int16" direction="Input"/> <param name="@LoginCount" dbType="Int32" direction="Input"/> <param name="@LastLoginIp" dbType="String" direction="Input"/> <param name="@AuditUser" dbType="String" direction="Input"/> <param name="@AuditDate" dbType="DateTime" direction="Input"/> <param name="@IsDeleted" dbType="Int16" direction="Input"/> <param name="@OLDApplicationID" dbType="Int32" direction="Input"/> <param name="@OLDID" dbType="Int32" direction="Input"/> <param name="@RowGuid" dbType="String" direction="Input"/> <param name="@IMNum" dbType="String" direction="Input"/> <param name="@Phone" dbType="String" direction="Input"/> <param name="@IsEmailValidate" dbType="Int32" direction="Input"/> <param name="@IsPhoneValidate" dbType="Int32" direction="Input"/> <param name="@StepNum" dbType="Int32" direction="Input"/> <param name="@SaleCode" dbType="String" direction="Input"/> <param name="@PasswordIM" dbType="String" direction="Input"/> <param name="@ActiveIP" dbType="String" direction="Input"/> <param name="@CompanyType" dbType="Int32" direction="Input"/> </parameters> </dataCommand> </dataOperations>
從以上配置項的程式碼應該都應該明白,其實就是講ADO.NET中的SQL語句以及引數配置到了這個配置檔案中。每一個操作語句就要配置一個dataCommand節點,最終這個配置檔案也是通過反序列化轉化為List集合物件了。在最底層其實是將以上內容轉化為了為了一個Command物件,在使用的時候只需要獲取Command物件就可以直接運算元據了。
name 節點屬性在全域性是唯一的,不能重複.
database 指向Database.config配置檔案中的name節點屬性值,用於設定連線的資料庫。
commandType 用於指定執行的語句是SQL語句還是儲存過程
commandText 用於指定執行命令的語句
parameters 指定佔位符引數
四. Command配置檔案管理
DbCommandFiles.config 檔案使用於管理Command配置檔案的,將Command配置檔案新增到這個檔案中,系統在啟動的時候會預設將Command配置檔案載入到快取中,轉化為Command物件。
<?xml version="1.0" encoding="utf-8" ?> <dataCommandFiles> <file name="DbVnPageRequestCommand.config"/> </dataCommandFiles>
這個檔案的根節點為dataCommandFiles,其子節點為執行的Command配置檔案,如果在系統中編寫了N多個Command配置檔案,但是沒有配置到這個配置檔案中,系統是不會載入該配置檔案的,所以需要特別的注意。
五. 日誌管理配置
在原有的系統中是沒有日誌記錄的[帶有日誌功能但是全部遮蔽,使用的是windows日誌],自己重新開發了一個日誌模板,其功能和log4net比較相似,但是沒有其強大,具體怎麼使用log4net檢視文章<Log4Net 全方位跟蹤程式執行>.
日誌使用必須要在app.config或者web.config配置檔案中配置,具體配置項如下(如何實現後面再說):
<appSettings> <add key="DatabaseListFile" value="/Configs/Data/Database.config"/> <add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/> <add key="CacheConfig" value="\Configs\Cache\cache.config"/> <add key="console" value="true"/> <add key="file" value="true"/> <add key="level" value="info"/> <add key="logpath" value="\Log\"/> <add key="logtype" value="Daily"/> </appSettings>
console 項指定是否在控制檯輸出日誌
file 是否在log檔案中記錄日誌
level 用於記錄日誌的級別
logpath 日誌檔案的記錄路徑
logtype 日誌檔案的生產模式,1天,1周,1月,1年等
六. 簡單的測試案例
這裡簡單的貼一段程式碼演示如何使用,後面具體詳細描述:
DataCommand command = DataCommandManager.GetDataCommand("User.UpdateAllBase"); command.SetParameterValue(":username","222"); command.SetParameterValue(":usergorup", "222"); command.SetParameterValue(":userlevel", 2);
int line = command.ExecuteNonQuery();
從以上程式碼可以看出,這裡的使用已經比ADO.NET簡單了很多,而且Command物件都是直接使用clone方式得到的,在操作的過程中沒有連線,關閉等操作,只需要指定相應的引數即可。
由於今日時間有限,文章比較粗鄙,就此完結,具體改進過程後面會一一詳述.