快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件
?
1.???? Codesmith軟件簡介
?
(1) Codesmith軟件是一種基于模板的代碼生成工具,在ORM中,它能幫助我們生成實體類、XML配置文件,從而簡化了我們一部分的開發工作,它的使用類似于ASP.NET的語法來生成任意類型的代碼和文本,使用Codesmith可以生成包括簡單的強類型集合和完整應用程序在內的任何東西。
?
(2) 當我們用ASP.NET開發網站或者項目生成應用程序的時候,我們經常需要完成一些重復性的任務,例如:編寫數據訪問代碼或者生成自定義集合,Codesmith在這個時候特別的有用,因為我們可以編寫模板自動完成這些任務,從而可以提高我們的工作效率。
?
(3) 下面我將以自動生成NHibernate的映射文件和映射類的實例來說明一下本軟件的使用方法,其它的我們可以自己研究研究,因為我要用到這些。
?
2.???? 第一步下載軟件
?
(1) 輸入網址:http://www.codesmithtools.com/我們可以下載代碼輔助生成器Codesmith。下載完成后我們可以安裝,安裝步驟和我們安裝任何的軟件都相同。這款軟件我們能夠免費使用1個月,一個月后我們可以找找怎么破解或者購買軟件。
?
3.???? 第二步:下載需要安裝的NHibernate組件
?
(1) 因為我要自動生成的是NHibernate的映射文件和類,但是本軟件本身沒有自帶,所以我們需要下載nhibernate template的一個組件,然后安裝到CodeSmith。下面我截圖大致說一下使用的方法。
?
(2) 打開軟件CodeSmith,如圖:
?
?
因為我已經安裝了NHibernate_template,所以現在已經顯示,如果沒有安裝的話,單擊像個小文件夾的地方,找到自己下載的組件的地方,然后添加進去。然后單開就如圖所示:
?
?
(3) 接下來怎么操作呢??呵呵,很簡單的,看到有個NHibernate.cst文件單擊如圖所示:
?
?
?
?
(4) 接下來我們可以看到上圖所示的圖形,我詳細的解釋一下,OutputDirectory的意思是我們要將生成的映射文件和映射類放在磁盤的那里,當然啦,這是我們自己選擇的。
?
(5) 我主要說一下做重要的就是SourceDatabase,因為這是如何從我們數據庫中讀取出來數據庫的,我們單擊最后面的三個點的按鈕,會出現如圖所示的界面,
?
?
這時候我們可以在DataSource(數據庫資源)下拉看是否有我們需要的數據庫,如果有的話,我們可以直接單擊Select,如果沒有的話我們可以單擊后面有三個小點的按鈕,這時候會出現如圖所示的界面:
?
?
?
?
(6) 然后我們單擊Add按鈕,將會啟動另外一個漂亮的界面,如圖所示:
?
?
?
?
(7) 重點的介紹是這里哦,在這里有個Name的文本框我們可以填入我們所需要的數據庫名,然后有個Provider Type的下拉列表框,在這個框里面我們可以選擇我們需要操作的數據庫,如下圖:
?
?
?
?
(8) 因為我操作的SQL Server 2005數據庫,所以我選擇了SqlSchemaProvider這個屬性代表數據庫,如果你使用的是其他的數據庫的話,你也可以自己選擇。然后有個Connection String的文本框,它是寫連接字符串的,如果我們自己會寫的話直接寫入到里面,然后單擊Test按鈕測試是否可行,如果不會寫的話,我們可以單擊三個點的按鈕然后跳到如圖所示的頁面:
?
?
?
?
(9) 這個頁面我們太熟悉了吧,只要是學過ASP.NET的都會接觸到這個頁面,所以我就不說了,但我們填寫完成信息后但就OK按鈕,會在前面的文本框中自動生成鏈接字符串,然后我們在單擊那個頁面的OK按鈕,然后我們在一層一層的退回來,這里我就在不截圖說明了,最后選擇到我們的數據庫。
?
(10) Assembly是我們項目的程序集的名字,我們可以輸入到里面,如果不知道的話我們可以再Visual Studio項目中的一個工程文件下面單擊右鍵——屬性,我們就可以看到程序集和默認命名空間的名字,如圖所示:
?
?
?
?
(11) ForceId默認就是選中的,也就是True的意思(如果表中的ID為主鍵),它的作用是就是強制NhibernateSample所表示的數據庫的所有表需要有主鍵,
?
(12) NameSpace即命名空間,我們可以和查看程序集的方法一樣查看那個的命名空間。
?
(13) RemoveTablePrefix使其默認的值就行。
?
最后單擊Generate按鈕,將會在你標識的位置生成映射文件和映射類。
?
4.???? 生成的項目的代碼
?
(1) 我用的數據庫如圖所示:建立一個NHibernate數據庫,在數據庫中建立一張users表,其中表的字段如圖所示:
?
?
?
?
(2) 生成的映射文件和映射類如下:
?
映射類:users.cs
?
using System;
?
using System.Collections;
?
?
?
namespace Test.Model
?
{
?
?????? #region User
?
?
?
?????? ///<summary>
?
?????? /// User object for NHibernate mapped table 'users'.
?
?????? ///</summary>
?
?????? public class User
?
?????? {
?
????????????? #region Member Variables
?
??????
?
????????????? protected string _id;
?
????????????? protected string _name;
?
????????????? protected string _password;
?
????????????? protected string _emailAddress;
?
????????????? protected DateTime _lastLogon;
?
????????????? #endregion
?
????????????? #region Constructors
?
????????????? public User() { }
?
????????????? public User( string name, string password, string emailAddress, DateTime lastLogon )
?
?????? ?????? {
?
???????????????????? this._name = name;
?
???????????????????? this._password = password;
?
???????????????????? this._emailAddress = emailAddress;
?
???????????????????? this._lastLogon = lastLogon;
?
????????????? }
?
????????????? #endregion
?
????????????? #region Public Properties
?
????????????? public string Id
?
????????????? {
?
???????????????????? get {return _id;}
?
???????????????????? set
?
???????????????????? {
?
??????????????????????????? if ( value != null && value.Length > 20)
?
?????????????????????????????????? throw new ArgumentOutOfRangeException("Invalid value for Id", value, value.ToString());
?
??????????????????????????? _id = value;
?
???????????????????? }
?
????????????? }
?
????????????? public string Name
?
????????????? {
?
???????????????????? get { return _name; }
?
???????????????????? set
?
???????????????????? {
?
??????????????????????????? if ( value != null && value.Length > 40)
?
?????????????????????????????????? throw new ArgumentOutOfRangeException("Invalid value for Name", value, value.ToString());
?
??????????????????????????? _name = value;
?
???????????????????? }
?
????????????? }
?
????????????? public string Password
?
????????????? {
?
???????????????????? get { return _password; }
?
???????????????????? set
?
???????????????????? {
?
??????????????????????????? if ( value != null && value.Length > 20)
?
?????????????????????????????????? throw new ArgumentOutOfRangeException("Invalid value for Password", value, value.ToString());
?
??????????????????????????? _password = value;
?
???????????????????? }
?
????????????? }
?
????????????? public string EmailAddress
?
????????????? {
?
???????????????????? get { return _emailAddress; }
?
???????????????????? set
?
???????????????????? {
?
??????????????????????????? if ( value != null && value.Length > 40)
?
?????????????????????????????????? throw new ArgumentOutOfRangeException("Invalid value for EmailAddress", value, value.ToString());
?
??????????????????????????? _emailAddress = value;
?
???????????????????? }
?
????????????? }
?
????????????? public DateTime LastLogon
?
????????????? {
?
???????????????????? get { return _lastLogon; }
?
???????????????????? set { _lastLogon = value; }
?
????????????? }
?
????????????? #endregion
?
?????? }
?
?????? #endregion
?
}
?
(2) 映射文件users.hbm.xml
?
<?xmlversion="1.0"encoding="utf-8" ?>
?
<hibernate-mappingxmlns="urn:nhibernate-mapping-2.0">
?
?????? <classname="Test.Model.User, Test.Model"table="users">
?
????????????? <idname="Id"type="String"unsaved-value="null">
?
?????? <columnname="LogonID"length="20"sql-type="varchar"not-null="true"unique="true"/>
?
???????????????????? <generatorclass="native" />
?
????????????? </id>
?
????????????? <propertyname="Name"type="String">
?
???????????????????? <columnname="Name"length="40"sql-type="varchar"not-null="false"/>
?
????????????? </property>
?
????????????? <propertyname="Password"type="String">
?
???????????????????? <columnname="Password"length="20"sql-type="varchar"not-null="false"/>
?
????????????? </property>
?
????????????? <propertyname="EmailAddress"type="String">
?
???????????????????? <columnname="EmailAddress"length="40"sql-type="varchar"not-null="false"/>
?
????????????? </property>
?
????????????? <propertyname="LastLogon"type="DateTime">
?
???????????????????? <columnname="LastLogon"length="8"sql-type="datetime"not-null="false"/>
?
????????????? </property>
?
?????? </class>
?
</hibernate-mapping>
?
總結,發現是不是很爽呢,這些代碼都自動生成了,我們只要在稍微的按我們的需求改改就行,大致的使用方法就介紹到這里吧,里面還有好多好用的東西呢,有時間的話我們可以研究研究的。嘿嘿
?
源碼下載地址:http://www.chuxinm.com/Shop/Detail/Detail?id=b88e9907dbaa4b3db297443081ab238d?
?
http://download.csdn.net/detail/hanyinglong/4491791這是我的下載地址,有需要的可以去這里下載
?
總結
以上是生活随笔為你收集整理的快速生成NHibernate的映射文件和映射类的利器 —— codesmith软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编写一个判断素数的函数,在主函数输入一个
- 下一篇: oracle登陆认证方式