『Spring.NET+NHibernate+泛型』框架搭建之Model(二)

煙雨六月發表於2015-07-29

  按照搭建專案的順序來比較好描述一些,我一般先搭建實體層,本節內容純屬於NHibernate範疇。先上圖和程式碼,然後對著圖和程式碼逐一講解,以角色表為例:


  T_Role表:


  資料庫表設計很簡單,ID為主鍵,並且是自增長的,其他欄位還包括角色名稱(Name)、描述(Content)、排序(Sort)、狀態(Status)、Del(是否刪除)。這裡就不對T_Role表贅述了。


   T_Role類:

using System;

//Nhibernate Code Generation Template 1.0
//author:MythXin
//blog:www.cnblogs.com/MythXin
//Entity Code Generation Template
namespace Model{
	 	//T_Role
		public class T_Role
	{
	
      	/// <summary>
		/// ID
        /// </summary>
        public virtual int ID
        {
            get; 
            set; 
        }        
		/// <summary>
		/// Name
        /// </summary>
        public virtual string Name
        {
            get; 
            set; 
        }        
		/// <summary>
		/// Content
        /// </summary>
        public virtual string Content
        {
            get; 
            set; 
        }        
		/// <summary>
		/// Order
        /// </summary>
        public virtual int? Sort
        {
            get; 
            set; 
        }        
		/// <summary>
		/// 1 啟用(預設)
        ///0 禁用
        /// </summary>
        public virtual string Status
        {
            get; 
            set; 
        }        
		/// <summary>
		/// 1 正常(預設)
      ///0 刪除
        /// </summary>
        public virtual string Del
        {
            get; 
            set; 
        }        
		   
	}
}


  T_Role類必須與T_Role表的欄位一一對應,名字可以不一樣,但是欄位屬性數量和型別必須是一一對應的,此外,每個欄位屬性都必須為virtual的。


T_Role表與T_Role的對映檔案:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" >
  <class name="Model.T_Role, Model" table="T_Role">
    <id name="ID" column="ID" type="int" unsaved-value="0">
      <generator class="native"/>
    </id>
    <property name="Name" type="string" column="Name" />
    <property name="Content" type="string" column="Content" />
    <property name="Sort" type="int" column="Sort" />
    <property name="Status" type="string" column="Status" />
    <property name="Del" type="string" column="Del" />
  </class>
</hibernate-mapping>


  顧名思義,T_Role的對映檔案是對映T_Role類和T_Role表的。注意以下幾點:

  (1) 必須按照上述格式書寫,其中:

    a. hibernate-mapping固定上述格式,assembly為檔案所在的名稱空間;

    b. class標籤中的name為“T_Role的名稱空間.T_Role,T_Role的名稱空間”,table為T_Role表的表名;

    c. id標籤為主鍵,必須有主鍵,unsaved-value="0"意思是預設值是0,<generator class="native"/>表示按照資料庫定義的方式處理主鍵,如我定義了自增長;

    d. id或property標籤中的name為T_Role類中欄位名稱,而column必須為與之對應的T_Role表的欄位名稱,且資料型別相同;

  (2) 檔案必須以.hbm.xml字尾結尾,如:T_Role.hbm.xml;

  (3) 必須右鍵點選檔案-屬性,將生成操作選為“嵌入的資源


  說明:T_Role類檔案(.cs檔案)和T_Role對映檔案(.hbm.xml)按理說可以分別放到不同的資料夾,但是這樣放,執行的時候卻提示找不到,最後無奈只能放一起了。要是哪位大神解決了此問題麻煩留言告知,謝謝。另外,檢視和表的方式完全一樣的,對映的時候指定對映的檢視就行了。

  最後,實體類和對映檔案都是可以通過程式碼生成器生成的,建議不要自己去寫,容易出錯,還找不出錯在哪裡,用程式碼生成器生成之後不對的修改下就可以了。我使用的動軟程式碼生成器,程式碼生成器連線上資料庫後,右鍵對應的資料庫選擇“模板程式碼批量生成”,選定要生成的表、模板就可以了,操作很簡單,就不詳述了,不清楚的留言,或加入部落格簽名裡的QQ群交流。


貼上Model的目錄圖,並不需要任何多餘的引用:








相關文章