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://download.csdn.net/detail/hanyinglong/4491791这是我的下载地址,有需要的可以去这里下载