技术开发 频道

NHibernate 示例

【IT168 技术文档】NH的online document中讨论了三种情况的的o/r mapping:
1)one-to-one
2)one-to-many / many-to-one
3)many-to-many

为了便于描述。,本系列学习手记将引入Category和Item对象,分别实现以下关系:
1)Category和Item对象之前不存在关系(none-association);
2)Category和Item对象之前存在着one-to-many的关系,即一个Category对象对应多个Item对象;
3)Category和Item对象之间存在着many-to-many的关系;
4)Category和Item对象之间存在着one-to-one的关系(我认为这是最少用到的关系类型)。

本文将以Category对象的简单操作来示例第一种情况。Category对象只有两个属性:ID(guid)和Name(string),我们来看看怎么使用NH来进行Category对象的CRUD操作。

主要内容
1、准备数据库
2、编写配置文件
3、编写POCO类
4、Category对象的CRUD操作

一、准备数据库
新建数据表,对应于Category对象的属性,该数据表只有CategoryID和Name两个字段:
CREATE TABLE [dbo].[nh_categories] (
    
[CategoryID] [uniqueidentifier] NOT NULL
 ,
    
[Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
 
ON [PRIMARY]

GO

二、编写配置文件
nh最令我不满的一点是即使是尝试一个非常简单的crud操作,都要先编写配置文件,而且目前好像也没有很好的自动生成工具。下面让我们新建Console工程BasicMappings,编写nhibernate配置文件和xml mappings文件。
1、新建文件hibernate.cfg.xml,并输入一下内容:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.0" > <session-factory name="CollectionMappings"> <!-- properties --> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider
</property> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string">Server=localhost;
database=NHTrial;User Id=sa;Password=sa
</property> <property name="show_sql">false</property> <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property> <property name="use_outer_join">true</property> </session-factory> </hibernate-configuration>
其中配置节的解释可以参考我之前发的NHibernate学习手记(3) - NH的配置信息,其中的show_sql表示是否在Console输出nh进行数据操作生成的sql语句。
同时,因为hibernate.cfg.xml文件要求在输出目录下,还需要在[项目属性]->[通用属性]->[生成事件]->[生成后事件命令行]中添加
copy $(ProjectDir)\hibernate.cfg.xml $(TargetDir)
用于在生成exe时把hibernate.cfg.xml文件拷贝到输出目录中。

2、新建objects.hbm.xml文件,并把文件属性设为”嵌入资源“。NH将根据*.hbm.xml中的配置进行o/r mapping的操作。
输入以下内容:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"> <!-- mapping for Category --> <class name="BasicMappings.Category, BasicMappings" table="nh_categories"> <id name="CategoryID" column="CategoryID" type="Guid"> <generator class="guid" /> </id> <property name="Name" type="string" length="50" /> </class> </hibernate-mapping>

把NH源文件中包含的nhibernate-mapping-2.0.xsd文件拷贝到%.NET 2003安装目录%\Common7\Packages\schemas\xml文件夹下,可获得intellisense的输入支持。
0
相关文章