目录

写在前面

文档与系列文章

代码生成器的使用

总结

写在前面

前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例子比较简单,字段比较少,如果一个数据表有几十个字段,你手敲的话烦都烦死了,不过为了学习nhibernate的语法,初学的过程还是建议自己动手,这样敲的多了就对每个过程,及映射文件中的节点的含义有个大致印象。前面举的例子,你也会发现这种方式的步骤就是首先创建数据库,然后编写持久化类,映射文件,最后编写操作数据的代码,这种方式是典型的数据库驱动开发(DbDD,Database-Driven Developent)技术。这个步骤能不能反过来?就好比EF中的Code First方式,先编码,然后再生成数据库。当然可以,可以借助SchemaExport工具把数据库生成了。这里还是先说说前面使用过得MyGeneration代码生成器的使用把。

什么是数据库驱动模型?

对象模型随着数据库架构的变化而变化。那为什么还需要这种模型?

一:数据库是遗留的系统使用的,并且数据库中已有大量的数据,不能随便更改。

二:你的数据库架构按照需求分析基本上确定了,不要做任何改动,在系统设计初期已经把数据库建好了。

使用数据库驱动模型流程就是当数据库架构修改时候,映射文件和持久化类通过代码生成工具重新生成一下。我们只要修改应用程序即可。

参考:http://www.cnblogs.com/lyj/archive/2008/11/10/1330542.html

文档与系列文章

[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent Classes)

[NHibernate]O/R Mapping基础

[NHibernate]集合类(Collections)映射 

[NHibernate]关联映射

[NHibernate]Parent/Child

[NHibernate]缓存(NHibernate.Caches)

[NHibernate]NHibernate.Tool.hbm2net

[NHibernate]Nullables

[NHibernate]Nhibernate如何映射sqlserver中image字段

[NHibernate]基本配置与测试 

[NHibernate]HQL查询 

[NHibernate]条件查询Criteria Query

[NHibernate]增删改操作

[NHibernate]事务

[NHibernate]并发控制

[NHibernate]组件之依赖对象

[NHibernate]一对多关系(级联删除,级联添加)

[NHibernate]一对多关系(关联查询)

[NHibernate]多对多关系(关联查询)

[NHibernate]延迟加载

[NHibernate]立即加载

[NHibernate]视图处理

[NHibernate]N+1 Select查询问题分析

[NHibernate]存储过程的使用(一)

[NHibernate]存储过程的使用(二)

[NHibernate]存储过程的使用(三)

代码生成器的使用

前面文章中已经介绍了一种开源的代码生成器MyGeneration,那么本篇文章我们继续介绍如何使用开源MyGeneration代码生成工具根据数据库架构生成映射文件和持久化类。(假设你已经安装了MyGeneration),由于代码生成器操作步骤类似,这里就引用李永京的文章中图进行说明了,也不考虑版本之间的差异了,知道使用的步骤就可以了。

1、点击“模板浏览器”窗口的第三个“在线更新”按钮:来在线下载模板。

2、出现“在线模板库”窗口,在“在线模板库”中提供了各种各样的模板,找到NHibernate节点:

3、展开NHibernate节点,找到“NHibernate Sharp 1.4 [sharpm64]”模板,右键点击“保存”。这个模板就自动保存到本地模板文件夹中。

4、点击“模板浏览器”窗口的第一个“刷新”按钮,这个模板就在“模板浏览器”可以看见了,展开NHibernate节点,右击“执行”NHibernate Sharp1.4模板。

5、这就是NHibernate OHM界面窗口,右面显示表、视图、操作标签,在表标签界面上,右边有不映射、映射等按钮,在表中不同的颜色代表字段不同的属性。

6、点击“CustomerId”列,右边显示了这个表,并在状态栏显示了“CustomerId”列的属性:int类型、主键。另外可以自己摸索一下:

7、点击“视图”标签,设置CustomerId为主键。

8、点击“操作”标签,我们具体设置程序集名称和命名空间名称,这里我设置GenDomainModel,设置生成工程,由于这个模板不支持VS2008,所以选择生成IDE版本为VS2005。设置输出路径。点击OK按钮。

9、这时打开文件夹,代码生成工具根据数据库架构生成了相应的持久化类和映射文件。

10、用VS2008打开,VS2008自动升级GenDomainModel.csproj解决方案文件,解决方案项目文件如下

11、这时就可以使用了,可以把这个类库利用添加现有项目功能添加到我们的项目中作为实体持久层,我们利用这个实体持久层编写数据访问层方法实现对数据库的CRUD操作,当然在使用前要搞清楚这个项目的类库架构,另外由于模板本身还不是很完善(例如这个模板不支持版本控制映射、不支持多对多直接映射),所以我们还需要按照实际情况去修改持久化类和映射,显然无形中增加了一些负担。

注意不要忘记在hibernate.cfg.xml中修改<mapping assembly="DomainModel"/>为<mapping assembly="GenDomainModel"/>。

总结

关于代码生成器的部分就说到这里,毕竟是一个工具,在项目中我用的是动软的代码生成器,工具是一个辅助的作用,少敲点代码,哪个用的顺手用哪个!

来源:http://www.cnblogs.com/lyj/archive/2008/11/10/1330542.html

[NHibernate]代码生成器的使用的更多相关文章

  1. 耗时两月,NHibernate系列出炉

    写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总 ...

  2. [NHibernate]O/R Mapping基础

    系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) 引言 对象和关系数据库 ...

  3. [NHibernate]存储过程的使用(一)

    目录 写在前面 文档与系列文章 Nhibernate中使用存储过程 一个例子 总结 写在前面 上篇文章一个小插曲,分析了延迟加载是如何解决N+1 select查询问题的.这篇开始介绍在nhiberna ...

  4. [NHibernate]存储过程的使用(二)

    目录 写在前面 文档与系列文章 创建对象 更新对象 总结 写在前面 上篇文章介绍了如何使用MyGeneration代码生成器生成存储过程,以及nhibernate中通过存储过程删除数据的内容,这篇文章 ...

  5. [Nhibernate]SchemaExport工具的使用(一)——通过映射文件修改数据表

    目录 写在前面 文档与系列文章 SchemaExport工具 SchemaUpdate工具 一个例子 总结 写在前面 上篇文章介绍了使用代码生成器的nhibernate模版来生成持久化类,映射文件等内 ...

  6. 不得不玩玩NHibernate

    1.0=>前言 放着好好的EF不用,为什么要来玩NHibernate了?那是因为现在的工作内容就是维护一个比较老的项目,第一版是公司找外包做的,跟数据库打交道这块用的NHibernate,虽然都 ...

  7. 一点一滴之NHibernate

    之前介绍了Dapper,速度很快,很轻量,很好用. 但是Dapper其实有自己的弊端,比如在数据关系复杂,数据库表非常多,多数据库支持,数据库结构变动频繁的时候总是很无奈.尽管有代码生成器,但是代码生 ...

  8. csharp: NHibernate and Entity Framework (EF) (object-relational mapper)

    代码生成器: 1. http://www.codesmithtools.com/ 2.https://sourceforge.net/projects/mygeneration/ 3. http:// ...

  9. Entity FrameWork 与 NHibernate

      1 Nhibernate 展示了NHibernate在数据库和用程序之间提供了一个持久层. 应用程序自己提供ADO.NET连接,并且自行管理事务.NHibernate体系结构如图1-51所示.它体 ...

随机推荐

  1. linux 文件系统结构及命令

    1.linux 文件系统结构 / 根目录 root |--mnt/ | |--sdcard/  挂载点 | |--usb0 | |--cdrom |--home | |--soft01 <- 用 ...

  2. 控制反转IoC简介

    控制反转IoC简介 在实际的应用开发中,我们需要尽量避免和降低对象间的依赖关系,即降低耦合度.通常的业务对象之间都是互相依赖的,业务对象与业务对象.业务对象与持久层.业务对象与各种资源之间都存在这样或 ...

  3. NOIP2010pj三国游戏[博弈论]

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  4. NOIP模拟赛20161007

    %hzwer http://hzwer.com/7602.html 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out ...

  5. POJ3250[USACO2006Nov]Bad Hair Day[单调栈]

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17774   Accepted: 6000 Des ...

  6. jdbc java数据库连接 5)CallableStatement 接口

    CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: DELIMITER $ CREATE PROCEDURE pro_findById(IN ...

  7. JavaScript中两种类型的全局对象/函数

    这里所说的JavaScript指浏览器环境中的包括宿主环境在内的. 第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数. 一.核心JavaScri ...

  8. WebForm路由踩坑 ajax请求多次

    WebForm路由踩坑 再次接触Asp.Net WebForm已是4年后的今天,源起新入职的公司,一个老的项目. Web接触的少,那就多动手写写. WebForm1.aspx <body> ...

  9. mysql服务器监控参数总结

    1)主机健康监控:网络通信.软硬件错误.磁盘空间.内存使用 2)mysql健康监控: 服务端口(telnet尝试连接).mysqld和mysqld_safe进程.errorlog和复制状态 3)主机性 ...

  10. FFT

    void FFT(complex a[],int n,int fl){ ,j=n/;i<n;i++){ if (i<j) {complex t=a[i];a[i]=a[j];a[j]=t; ...