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两个字段:
二、编写配置文件
nh最令我不满的一点是即使是尝试一个非常简单的crud操作,都要先编写配置文件,而且目前好像也没有很好的自动生成工具。下面让我们新建Console工程BasicMappings,编写nhibernate配置文件和xml mappings文件。
1、新建文件hibernate.cfg.xml,并输入一下内容:
其中配置节的解释可以参考我之前发的NHibernate学习手记(3) - NH的配置信息,其中的show_sql表示是否在Console输出nh进行数据操作生成的sql语句。
同时,因为hibernate.cfg.xml文件要求在输出目录下,还需要在[项目属性]->[通用属性]->[生成事件]->[生成后事件命令行]中添加
2、新建objects.hbm.xml文件,并把文件属性设为”嵌入资源“。NH将根据*.hbm.xml中的配置进行o/r mapping的操作。
输入以下内容:
把NH源文件中包含的nhibernate-mapping-2.0.xsd文件拷贝到%.NET 2003安装目录%\Common7\Packages\schemas\xml文件夹下,可获得intellisense的输入支持。
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
[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>
同时,因为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
相关文章