在没有FluentNHibernate的情况下,如果使用NHibernate来做数据库映射,那么首先需要安装NHibernate(也就是应用Nhibernate.dll),然后创建Nhibernate.cfg.xml数据库配置文件,然后创建映射文件.xml,最后创建Session,直接对对象操作即可。虽然这样做并不困难,但是很麻烦,想象下如果数据库表有上百张,那使用这种方法映射不就很麻烦,笨重了吗。
那么FluentNHibernate有什么好处呢,它能够省略创建映射文件.xml,使用C#代码编写映射文件,这样做能在一定情况下简化工作量,同时也便于对映射代码进行修改,具体使用方法接下来会详细讨论。
一、创建数据库配置文件
首先创建一个数据库的配置文件,刚开始使用的话手动编写太麻烦,这时候可以考虑使用自带的配置文件,在官网下载后会有一个名为Configuration_Templates的文件夹,里面有不同数据库的配置文件,可以使用它的默认设置,但是需要将名称改为Nhibernate.cfg.xml。这里使用如下的配置:
<?xml version="1.0" encoding="utf-8"?>
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="KaddzvoteNHibernateFactory">
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
Data Source=.;Initial Catalog=Mapping;Integrated Security=true;Pooling=True;Min Pool Size=20;Max Pool Size=60
</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect
</property>
<property name="current_session_context_class">thread_static</property>
<property name="generate_statistics">true</property>
<property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>
<property name="query.substitutions">
true 1, false 0, yes 'Y', no 'N'
</property>
<!--配置是否显示sql语句,true代表显示-->
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
二、创建实体
NHibernate的基本映射和Hibernate是完全相同的,有关基本的映射这里不再详细的讨论,可以翻阅笔者的前几篇文章。下面自己做了一个小的项目Demo,演示如何使用NHibernate创建一个数据库的映射,具体的数据库结构图如下:
上图的数据库结构图中涵盖了基本的映射关系,在实际的项目中也就是上面出现的几种基本的关系,其中涵盖了一对一、多对一、多对多的关联关系,接下来将会使用FluentNHibernate来实现基本的映射关系。
2.1 创建实体
添加完配置文件后使用第三方工具将数据库表导出为实体对象,也就是添加数据库表的实体对象。添加完成后继续添加数据库的映射类,添加映射类时需要继承NHibernate的ClassMap<T>类,将数据库实体放置到对象内部,这样在映射时能够直接使用,它使用的是泛型来实现的。数据库表的实体如下代码: