Using NHibernate Schema Tool
使用NHibernate Schema Tool
在许多情况下,一些大的处理过程中需要生成或更新您的数据库.比如一个构建脚本或安装的过程. 本节将介绍如何使用命令行工具来完成我们的hbm2ddl任务.
准备
从http://nst.codeplex.com/上可以下载到最新版的NHibernate Schema Tool .安装步骤如下:
1. 在C:\Program Files下新建一个名为NHibernateSchemaTool的文件夹.
2. 将nst.exe复制到该文件夹.
3. 将C:\Program Files\NHibernateSchemaTool添加到环境变量PATH中.
完成NHibernate Schema Tool的安装后,再进行下面的步骤:
1. 完成本章开始部分的Configuring NHibernate with App.config示例.
2. 在你的电脑上安装Microsoft SQL Ser ver 2008 Express, 使用默认设置.
3. 创建一个名为NHCookbook的空数据库.
提示
NHibernate的该项功能对所有的RDBMS适用. 请依据不同的RDBMS来调整dialect和连接字符串设置.
步骤
1. 为项目添加一个名为hibernate.cfg.xml的文件,代码如下:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </property> <property name="dialect"> NHibernate.Dialect.MsSql2008Dialect, NHibernate </property> <property name="connection.connection_string"> Server=.\SQLExpress; Database=NHCookbook; Trusted_ Connection=SSPI </property> </session-factory> </hibernate-configuration>
2. 打开该文件的属性页,将【复制到输出目录】设置为【始终复制】.
3. 编译.
4. 打开命令提示行窗口,将目录切换到你的已经编译好的映射程序集和hibernate.cfg.xml所在的目录.
提示
快速打开命令提示行窗口:右击项目,选择在Windows资源管理器中打开文件夹. 打开bin文件夹.按住Shift键,右击Debug文件夹,选择在此处打开命令行窗口.
5. 运行下述命令:
nst /c:hibernate.cfg.xml /a:Eg.Core.dll /o:Create.
原理
NHibernate Schema Tool是hbm2ddl工具的一个命令行形式的封装 .这使得NST适合应用于创建数据库脚本和持续集成服务器(continuous integration servers).
- /c 参数指定所要使用的配置文件. 没错,hibernate.cfg.xml的内容和app.config中的hibernate-configuration节点几乎完全相同.
- /a 参数指定程序集,该程序集包含映射文件和可持久化类.
- /o:创建NHibernate操作数据库对象的设置,支持Create ,Update和Delete.
扩展
NST有几个命令行的设置选项,如下:
命令行设置 | 描述 |
/c:<path-to-hibernate-config> | 指定所要使用的Nhibernate配置文件 |
/a:<assembly[;assembly2 ]> | 包含.hbm.xml(属性设为嵌入式)文件的程序集或程序集列表的路径. |
多个程序集用分号(;)分割.这些程序集也可能包含可持久化类. | |
/m:<assembly[;assembly2]> | 包含可持久化类的程序集或程序集列表的路径,多个程序集用分号(;)分割 |
/d:<path[;path2]> | 包含.hbm.xml映射文件的一个/多个目录. |
/s | 生成脚本,但不执行.将脚本输出到控制台. |
/v | 生成脚本并执行.把脚本输出到控制台. |
/o:<Create|Update|Delete> | 指定Create, Update, 或Delete操作 |