首页 > 代码库 > Nhibernate一对多映射
Nhibernate一对多映射
在Nhibernate中,映射文件对应数据库表中的关系,所有Nhibernate中也有一对一映射、一对多映射和多对多映射。首先,看看一对多映射,一对多映射就是数据库中两表的关系是一对多的关系,例如:学生和班级的关系,就是一对多的关系,一个班级有多个学生,一个学生只属于一个班级;字典类型和字典表也是一对多的关系。用字典类型和字典表做实例:
一对多关联映射有单向和双向之分,单向表示在一边维护他们的关系,双向表示在两边都要维护关系。首先看下单向一对多关联映射。
字典类型DictionTypeEntity实体和字典实体DictionEntity:
public class DictionaryEntity { /// <summary> /// ID /// </summary> public virtual Guid ID { get; set; } /// <summary> /// 键 /// </summary> public virtual string Key { get; set; } /// <summary> /// 键值 /// </summary> public virtual string Value { get; set; } /// <summary> /// 类型 /// </summary> public virtual string Type { get; set; } /// <summary> /// 时间戳 /// </summary> public virtual string TimeStamp { get; set; } /// <summary> /// 操作用户 /// </summary> public virtual string AddUser { get; set; } /// <summary> /// 备注,描述 /// </summary> public virtual string Remark { get; set; } }
<pre name="code" class="csharp">/// <summary> /// 该实体类与数据库表'T_DictionaryManage'. /// </summary> public class DictionaryTypeEntity { #region 实体属性 /// <summary> /// 类型 /// </summary> public virtual string Type { get;set; } /// <summary> /// 类型名称 /// </summary> public virtual string TypeName { get; set; } /// <summary> /// 时间戳 /// </summary> public virtual string TimeStamp { get;set; } /// <summary> /// 操作用户 /// </summary> public virtual string AddUser{ get; set; } #endregion /// <summary> /// 字典实体list集合 /// </summary> public virtual IList<DictionaryEntity> DictionaryEntitys { get; set; } }
字典类型DictionTypeEntity对应的hbm.xml文件:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Model.Entity.DictionaryTypeEntity, Model" table="T_DictionaryManage"> <id name="Type" type="String" unsaved-value=http://www.mamicode.com/"null">>字典实体DictionEntity对应的hbm.xml文件:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Model.Entity.DictionaryEntity, Model" table="T_Dictionary"> <cache usage="read-write"/> <id name="ID" type="Guid" > <column name="ID" length="150" index="PK_Dictionary"/> <generator class="guid" /> </id> <property name="Key" type="String"> <column name="KeyName" length="20" not-null="false"/> </property> <property name="Value" type="String"> <column name="ValueName" length="20" not-null="false"/> </property> <property name="Type" type="String"> <column name="DictionaryType" length="20" not-null="false"/> </property> <!-- 多的一端,字典类型(去掉双向关联映射)--> <!--<many-to-one name="Type" class="Model.Entity.DictionaryTypeEntity" column="DictionaryType" />--> <property name="TimeStamp" type="String" length="20"> <column name="DateTimeStamp" not-null="false"/> </property> <property name="AddUser" type="String"> <column name="AddUser" length="20" not-null="false"/> </property> <property name="Remark" type="String"> <column name="Remark" length="50" not-null="false"/> </property> </class> </hibernate-mapping>
这样查询一个字典类型时,字典表里该类型的所有记录也会查询出来,这样显见的是不用两个表联合查询了。
Nhibernate里支持懒加载,如果我们设置lazy="true",则字典表里对应的记录一开始不会查询出来,只有真正使用的时候才会查出来,这样就可以提高一些效率。
Nhibernate一对多映射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。