星期四, 12月 20, 2007

[.Net]How to monorail by Generator tool(2)

接下來,就參考這篇有名的 Four Days on Rails 來試試看吧~
首先呢,由於隔了這麼久才寫這篇,所以 Generator 改位置了,你得從這裡:http://svn.castleproject.org:8080/svn/castle/trunk/Experiments/Generator/ Checkout,其他大致都跟上篇一樣。

  1. 先利用 monorail ToDo,建立專案,接著依照上篇文章作必要的設定,同時我們使用 rc2,不使用最新的版本(也就是你不用更動 default.build),設定的部份就不再贅述。
  2. 建立資料庫,這邊我是用MySQL,建立的資料庫名稱是 ToDoDev,不過這只有跟修改連線字串有關係。
  3. 修改資料庫的連線字串,連線字串是放在 config/databases/ 下的 ActiveRecord 設定檔裡面,你可以看到這邊有兩個設定檔,他很貼心的把開發用與測試用的資料庫分開:development.xml、test.xml,事實上,你還可以增加一個 Production (或是其他名字)的 ActiveRecord 設定檔,表示這是正式上線用的資料庫。切換的時候,可以更動 config/boot.cs 以決定使用哪個 ActiveRecord 設定檔,預設是 development。
  4. 建立 Model,首先先產生"Category",Category 的欄位如下:
    id int autoincrement
    name varchar(255)
    created_on datetime
    updated_on datetime
    ,在專案的目錄下輸入:script\generate model Categories name created_on updated_on,這邊要注意的是,不需要特別寫 id,因為慣例至上,Generator會自動幫你增加 Id 這個欄位。Generator 會幫你作三件事情:產生 Category 這個類別、產生測試 Category 的 Unit test 類別以及建立資料表格的程式,你可以從指令的輸出結果很清楚的看到。
    exists app\models
    create app\models\Categories.cs
    exists test\models
    create test\models\CategoriesTest.cs
    create db\migrations
    create db\migrations\001_AddCategoriesTable.cs
  5. 接下來,要去修改 Categories 類別的屬性型態,Generator 預設都是把型態設為字串,db\migrations 那邊則都是建立 varchar(50)。所以除了 app\models\Categories.cs 要修改型態之外,db\migrations\001_AddCategoriesTable.cs 下也要改!這邊把 Name 改為 255 個字元,created_on與updated_on 則改為 DateTime。
  6. 都修改完畢之後,就可以執行 nant migrate,這個步驟會幫你去實體資料庫作必要的事情。為甚麼要這樣子作?我想是因為一般資料庫的 script 是沒有作管理的,因此,才刻意把這些要去資料庫建立表格、修改欄位等的動作都放到 db\migrations 下,以便把這些程式也都納入版本控制。
  7. 執行 script\generate scaffold Category,這個步驟會一口氣幫你把 CRUD 的頁面都弄出來。
  8. 那麼,就編譯吧,直接執行 nant,只是卻出現了...
    [csc] app\controllers\CategoriesController.cs(36,72): error CS0246: 找不到型別或命名空間名稱 'Category' (您是否遺漏 using 指示詞或組件參考?)
    [csc] app\controllers\CategoriesController.cs(56,45): error CS0246: 找不到型別或命名空間名稱 'Category' (您是否遺漏 using 指示詞或組件參考?)
    這個,得去修改 CategoriesController.cs,把 Category 都改為 Categories,這看來是 Generator 的問題。接著又再出現
    error CS1501: 方法 'CreatePagination' 沒有任何多載使用 '2' 個引數
    ,唉~這個錯誤訊息實在是太黯然又太銷魂...你必須再次修改 CategoriesController.cs,添加這兩行:
    using System.Collections;
    using System.Collections.Generic;
    然後把
    PropertyBag["categories"] = PaginationHelper.CreatePagination( Categories.FindAll(), 10);
    改為
    PropertyBag["categories"] = PaginationHelper.CreatePagination( (IList)Categories.FindAll(), 10);
    ,接下來應該就沒問題了。
  9. 先試試看到目前為止的成果吧,輸入script\server,然後打開你的瀏覽器,在位址列輸入:http://localhost:8080/categories/list.aspx,就能看到結果了。


執行結果:
categories_list_aspx

沒有留言: