使用NHibernate创建表结构方法

来源:互联网 发布:nginx版本查看 编辑:程序博客网 时间:2024/05/23 20:45

        NHibernate是一个比较好用的持久化组件,通常我们编写好我们的表-对象映射文件之后,需要建立数据库表结构,我们可以手工的方式来建立,当然我们也可以通过更加简便的方式来完成.因为NHibernate中已经为我们提供了相应的工具.那就是NHibernate.Tool.hbm2ddl.SchemaExport类.我们可以通过这样的方法来调用NHibernate.Tool.hbm2ddl.SchemaExport实现脚本生成.


       使用SchemaExport工具生成数据库架构,这就是领域驱动设计/开发(DDD,Domain Driven Design/Development)的思路。设计,开发应基于对象模型,按照对象模型建立数据库关系模型,而非先设计数据库然后再设计对象.下面我们来介绍一下怎么用SchemaExport创建表/表脚本.


1.首先在引用NHibernate的项目中,新建一个单元测试项目.在一个类中,右键点击[Create Unit Tests..]选项,弹出新建测试相应的项目,类,方法选择及项目输出名字等设置对话框
2.按默认点击[OK]
3.进度条走完,测试项目创建成功了
4.我们进到新建的一个测试类中,随便选择一个测试的方法,例如这里,我选择自动生成用来测试SaveTypes方法的测试方法 SaveTypesTest().  自动生成的SaveTypesTest()方法方法体如下: 

        /// <summary>        ///A test for SaveTypes        ///</summary>        [TestMethod()]        public void SaveTypesTest()        {            TypesBLL target = new TypesBLL(); // TODO: Initialize to an appropriate value            Types t = null; // TODO: Initialize to an appropriate value            target.SaveTypes(t);            Assert.Inconclusive("A method that does not return a value cannot be verified.");        }

5.我们可以在SaveTypesTest()方法体中加入生成表结构的相关代码:

        //添加引用:        using NHibernate;        /// <summary>        ///A test for SaveTypes        ///</summary>        [TestMethod()]        public void SaveTypesTest()        {    //获取当前NHibernate中的配置信息            NHibernate.Cfg.Configuration _cfg = new NHibernate.Cfg.Configuration().Configure();    //用NHibernate.Tool.hbm2ddl.SchemaExport生成表结构到D:\sql.sql文件当中            NHibernate.Tool.hbm2ddl.SchemaExport export = new NHibernate.Tool.hbm2ddl.SchemaExport(_cfg);            export.SetOutputFile("D:\\sql.sql"); //设置输出目录            export.Drop(true, true);//设置生成表结构存在性判断,并删除            export.Create(true, true);//设置是否生成脚本,是否导出来            TypesBLL target = new TypesBLL(); // TODO: Initialize to an appropriate value            Types t = null; // TODO: Initialize to an appropriate value            target.SaveTypes(t);            Assert.Inconclusive("A method that does not return a value cannot be verified.");        }



6.好了之后,我们点击右键,选择[Run Tests],可能运行测试的时候,会有找不到文件的提示,这个可能是NHibernate依赖的组件没有复制到Test项目中bin\debug\目录下面来,如
Iesi.Collections.dll,Antlr3.Runtime.dll之类的,另一个原因是D:\sql.sql文件没有建立.我们可以手工在D:\下建一个空白的sql.sql文件.

7.运行测试完成之后,我们可以看到数据库已经为我们生成了映射文件中对应的数据库表,D:\sql.sql 文件中也有相应的脚本生成.如果我们生成表之后,表结构有变化怎么办,Nhibernate已经想到了一点,SchemaExport使用以下的方法实现public void Execute(bool script, bool export, bool justDrop).

比如说我们可以用Excute方法来生成映射文件中属性变化引起的数据表结构变化的更改/更改sql脚本.


当然,SchemaExport工具当前还有一些不太完善的地方,期待新版本的发布能改善一下.






原创粉丝点击