使用MyGeneration生成儲存過程和資料訪問層程式碼

iDotNetSpace發表於2008-06-24
MyGenertion是一款不錯的程式碼生成ORM程式碼生成工具,下面是我學習過程中的一些筆記(總結了一下dOOdads C# Quick Reference文件,還有自己在使用和除錯過程中遇到的問題及自己的解決方法),貼出來與大家共享 。

 

     這篇文章主要講解怎樣用MyGeneration(我用的MyGeneration的版本號是1.5.1)的dOOdad模板(使用其自帶的模版)來生成程式碼,及將這些程式碼加入到專案中。

  

1.   準備工作: 資料庫設計(MS Sql Server):
   1). 為每張表設定一個identity列作為主鍵。也可以用GUID或多列作為主鍵。
   2). 為每張表增加列名為“RowVersion”的列,資料型別設為時間戳(timestamp)。dOOdad將用這列處理併發。
   3). dOOdad只能處理單張表,不能處理多表聯合查詢。要處理多張表,可以建立檢視,用操作試圖替換多表問題。
   4). 在設計資料庫和應用程式時,儘可能少地使用null。

  

2.  安裝MyGeneration,新增dOOdad專案到解決方案:
   1).http://www.mygenerationsoftware.com下載並安裝。


   2). 安裝完成後,dOOdad專案位於..\MyGeneration\Architectures\dOOdad\CSharp\MyGeneration.dOOdad\目錄下,有兩個版本,2003和2005,根據你的需求,選擇一個新增到解決方案中。另外,目錄下有個readme.txt檔案,也將了一些dOOdas的使用步驟和說明。
       當然,我們也可以直接開啟該專案,編譯生成dll檔案,然後在應用程式中新增該程式集引用;但該專案的程式碼還存在一些問題,可能要在除錯的時候才能發現,這時再修改程式碼新增引用就很不方便,所以個人不推薦這樣做。
在DbAdapters資料夾下,預設所有的檔案的生成操作屬性都是"無",即不編譯進專案。分別選擇應用程式的資料庫所對應的兩個*Entity.cs和*DynamicQuery.cs兩個檔案,將他們的屬性--生成操作改為"編譯",這樣就可以編譯進生成的Assembly中。
MyGeneration支援的資料庫對應的檔案:
   SQL Server (SqlClientDynamicQuery.cs, SqlClientEntity.cs)                System.Data.SqlClient
   Access        (OleDbDynamicQuery.cs, OleDbEntity.cs)                          System.Data.OleDb
   Oracle          (OracleClientDynamicQuery.cs, OracleClientEntity.cs)   System.Data.OracleClient
   PostgreSql  (PostgreSqlDynamicQuery.cs, PostgreSqlEntity.cs)       Npgsql  
   Firebird        (FirebirdSqlDynamicQuery.cs, FirebirdSqlEntity.cs)        FirebirdSql.Data.Firebird
   VistaDB       (VistaDBDynamicQuery.cs, VistaDBEntity.cs)                   VistaDB
   SQLite         (SQLiteDynamicQuery.cs, SQLiteEntity.cs)                        Finisar.SQLite
   MySQL         (MySQL4DynamicQuery.cs, MySQL4Entity.cs)                  MySql.Data.MySqlClient
  3). 現在就可以編譯了。

 

 

3.  其他需要訪問該Assembly的專案:
   1). 為專案新增引用--專案--MyGeneration.dOOdad
   2). 為專案新增兩個資料夾:
       DAL(資料訪問層):用於存放MyGeneration建立的Abstract類(下面會講如何使用MyGeneration來生成這些類)。
       BLL(業務邏輯層): 用於存繼承上面的Abstract類的具體類,可由MyGeneration自動生成。

 

 

4.  使用MyGeneration:
  4.1 生成CRUD儲存過程:
      1) 執行MyGeneration,Edit--DefaultSetting,設定資料庫、程式語言等。
      2) 點選工具欄-Template Browser,選擇要建立的儲存過程的模板
          可用的模版有:
           Microsoft SQL      - Microsoft SQL Server.dOOdad Stored Procedures
           Microsoft Access   - Microsoft Access.Access Stored Procedures
           Oracle             - Oracle.Oracle Stored Procedures
           PostgreSQL         - PostgreSQL.PostgreSQL Stored Procedures
           Firebird           - Firebird.StoredProcedures.Firebird Stored Procedures
      3) 執行模版,選擇資料庫和表(一般選則所有表),單擊確定後,會在OutPut中輸出儲存過程
      4) 將生成的儲存過程拷貝到查詢分析器中,然後執行向資料庫中寫入儲存過程。

  4.2 為資料庫中的表生成DAL Abstract類:
      同上,選擇Template Browser--dOOdad--C#(其他的與此類似)--dOOdad Business Entity--執行模版--選擇上面建立的DAL資料夾,設定要生成的類的名稱空間和資料庫,選擇所有表,然後生成Abstract類。


  4.3 為資料庫中的檢視生成具體類:
      選擇dOOdad Business View模版,並將生成的類儲存在BLL資料夾,其他同上。


  4.4 生成具體類(也可以自己寫):
      選擇dOOdad Concrete Class模版,其他同上。

  

5.   Visual Studio中使用上面生成的資源:
    1) 在配置檔案web.config或app.config配置連線字串。dOOdad專案中預設的key是"dbConnection",也可以修改BusinessEntity類中的_defaultConfig欄位的值來修改key的預設值。
      另外,dOOdad專案有個問題就是連線字串並沒有初始化(可能是模版的bug),程式碼如下: 

internal string _raw = "";
virtual public string ConnectionString
{
    
get
    
{
     
return _raw;
    }

   
set
   
{
    _raw 
= value;
   }

}

       雖然可以在應用程式中手動給屬性ConnectionString賦值,但這樣的話,每個業務實體在new完之後,都要給ConnectionString賦值,比較繁瑣不好維護;一個比較好的辦法就是在BusinessEntity的建構函式中對_raw進行初始化(自己寫程式碼)。我用的是VS2005,可以用VS2005自動生成配置檔案和配置檔案的讀取類Settings,然後初始化連線字串,例如:internal string _raw = ProjectName.Properties.Settings.Default.ConnectionString;

   2)  可以在上面生成的具體類(Concrete Class)中新增應用程式自己的業務邏輯,可處理自定義儲存過程和SQL語句等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-364714/,如需轉載,請註明出處,否則將追究法律責任。

相關文章