Generating the database
生成数据库
第一章中, 我们在将可持久化类映射到数据库时,创建了她们之间的映射,但还没有创建数据库.本节介绍如何以映射为基础用两行代码来创建必需的数据表,列,键和关系.
准备
1. 完成本章开始部分的Configuring NHibernate with App.config示例.
2. 在你的电脑上安装Microsoft SQL Ser ver 2008 Express, 使用默认设置.3. 创建一个名为NHCookbook的空数据库.提示
NHibernate的该项功能对所有的RDBMS适用. 请依据不同的RDBMS来调整dialect和连接字符串设置.
步骤
1. 打开Program.cs.
2. 添加下述using语句:using NHibernate.Tool.hbm2ddl;
3. 在Main函数尾部添加下述代码:
var schemaExport = new SchemaExport(nhConfig);schemaExport.Create(false, true);
4. 编译运行.
5. 打开数据库查看生成的表.原理
在configuration对象中hbm2ddl (hibernate mapping to data definition language)工具使用映射元数据来生成数据库对象的SQL脚本,然后她会连接数据库并运行脚本.
扩展
另外,当应用程序调用BuildSessionFactory时,我们可以使用hbm2ddl.auto配置属性来自动生成数据库框架. 我们可以将属性设置为下面的值:
- update:SchemaUpdate类会更新数据库模式,避免破坏性的变更 . 她只适用于实现了IDataBaseSchema接口的dialects.
- create: SchemaExport类会为一个新的数据库从头开始创建数据库模式.
- create-drop: SchemaExport会先删除现有数据库再重新创建数据库,然后创建数据库的各个表.
- validate : SchemaValidate会基于你的映射来比较现有的数据库和NHibernate所期望的数据库的模式.和update一样,要求dialect实现IDataBaseSchema接口.
虽然在开发过程中create-drop非常有用,但是在生产环境中只建议使用validate,因为一个很小的错误都可能酿成严重的后果. 相反,在设置生产环境下的数据库时,应该自己去创建数据库脚本并显式的运行她,如下节所示.