Welcome

首页 / 软件开发 / .NET编程技术 / 我的NHibernate之路(2)---主从表(一对多)配置篇

我的NHibernate之路(2)---主从表(一对多)配置篇2010-12-21 博客园 tyb1222通过我上篇文章的配置,单独做一张表的操作已经够了。但是在我们实际开 发的过程中,很多时候数据库中都存在着主从表等关系,这时候就存在主表中的 一条记录可能对应多条从表中的记录。那么这种情况下,我们还用上篇文章的的 简单配置就不够了。下面我通过一个实际的例子说说Nhibernate中主从表的配置 。

先介绍开发环境和软件版本:VS2008 SP1、NHibernate-2.1.2.GA-bin。在下 面的例子中,就两张表,一张Class表,一张Student表。这就是一个典型的主从 表的关系。

这种情况下的Nhibernate配置与上篇中的相同,所需要改变的是映射文件的 配置。操作如下:

1、映射文件配置。

主表的映射:一对多的关系。配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="NHibernateSample.Model">
<class name="NHibernateSample.Model.Class, Model" table="`Class`">
<id name="Id" type="Int32" unsaved-value="0">
<column name="ClassId" length="4" sql-type="int" not-null="true" unique="true" index="PK_Class"/>
<generator class="native" />
</id>
<property name="ClassCode" type="String">
<column name="ClassCode" length="50" sql-type="varchar" not- null="false"/>
</property>
<property name="PeopleCount" type="Int32">
<column name="PeopleCount" length="4" sql-type="int" not- null="false"/>
</property>
<bag name="Students" inverse="true" lazy="true" cascade="all- delete-orphan">
<key column="ClassId"/>
<one-to-many class="NHibernateSample.Model.Student, Model"/>
</bag>
</class>
</hibernate-mapping>

其中,黑色部分便是对一对多关系的配置。说明如下:

bag:对象结合。结合中的元素可以重复。相当于.Net中的IList或者 IList<T>.name="Students"说的是在实体类Class中有一个Students的属 性。inverse=“TRUE”说名是子实体类维护关联关系,它默认为FALSE,即夫实 维护关联关系。cascade="all- delete-orphan"指明当添加主表中的记录时,会 添加相关的记录到字表中,此时相当于“save-update”。当删除主表中的记录 时,会级联删除字表中相关联的记录,此时相当于“delete”在父类中删除对应 数据库记录时。即在子表中不会出现一些与主表无关联的数据。

key:column="ClassId"说明是"ClassId"列与字表关联

one-to-many class="NHibernateSample.Model.Student, Model"。one-to- many指明是一对多的关系。在此映射文件中一当然是指Class实体。多指的是 Model程序集中的、命名空间为NHibernateSample.Model的Student实体