迷恋弦哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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,因为一个很小的错误都可能酿成严重的后果. 相反,在设置生产环境下的数据库时,应该自己去创建数据库脚本并显式的运行她,如下节所示. 

posted on 2012-07-11 15:59  迷恋弦哥  阅读(250)  评论(0编辑  收藏  举报