Nhibernate中一对多映射——双向关联

上一篇博客中提到的是单向关联: Nhibernate一对多映射——单向关联。这篇说说双向关联。

双向关联和单向关联的区别是:两边都能维护关系,如我查询两边的任何一边,另外一边的信息也能查询出来,其他的修改删除只要设置了,也都可以。体现在代码中是:因为上篇单向关联是在DictionaryEntity上,所以变为双向关联要DictionTypeEntity和他对应的xml文件中加上关联映射。


DictionaryEntity修改为:

#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; }  
	         
			/// <summary>
		        /// 字典实体list集合
		        /// </summary>
		        public virtual IList<DictionaryEntity> DictionaryEntitys { get; set; }
	 

        #endregion 


DictionaryEntity对应的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="DictionaryType" type="String" unsaved-value="null">
			<column name="DictionaryType" length="20"    unique="true"/>
			<generator class="assigned" />
		</id>
		<property name="TypeName" type="String">
			<column name="TypeName" length="50"   not-null="true"/>
		</property>
		<property name="TimeStamp" type="String">
			<column name="DateTimeStamp" length="20"   not-null="true"/>
		</property>
		<property name="AddUser" type="String">
			<column name="AddUser" length="20"   not-null="false"/>
		</property>
    <!-- 字典实体 -->
    <bag name="DictionaryEntitys" inverse="true" cascade="all">
      <key column="DictionaryType"/>
      <one-to-many class="Model.Entity.DictionaryEntity"/>
    </bag>
	</class>
</hibernate-mapping>


此时,如果我们查询了DictionaryEntity的信息,想知道DictionaryTypeEntity的Value的信息,只要DictionaryEntity.DictionaryType.Value就能查询出来我们想要的值。如果我们想保存DictionaryEntity的信

息,我们得先实例化一个DictionaryTypeEntity,并赋值给DictionaryEntity.DictionaryType。如下:


DictionaryTypeEntity enDictionaryType=new DictionaryTypeEntity();
DictionaryEntity enDictionary=new DictionaryEntity();
enDictionary.DictionaryType=enDictionaryType;

这样就不会报“未对对象实例化”的错误了。这样是不是简单多了,避免以前的联合查询啥的了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。