nhibernate的一对多关系

来源:互联网 发布:义乌淘宝摄影培训 编辑:程序博客网 时间:2024/06/05 09:02

栏目类(一)(栏目包含多个类别)

数据字典

1.1.表Tb_ Subject(栏目表)
表名Tb_ Subject
列名              空/非空数据类型(精度范围)约束条件
ID                  N         intPK,                   流水号
SubjectName N     nvarchar(200)          栏目名称
 
1.2.表Tb_ Class(类别表)
表名Tb_ Class
列名       空/非空数据类型(精度范围)约束条件
ID              N        intPK,                流水号
SubjectID  N         Int                     栏目id
ClassNameN     nvarchar(200)      类别名称
 
实体类:

public class TbSubject
 {
 #region Field Members
 
 private int _id;
 private string _subjectname;

  private ICollection _classes;
   
 #endregion End of Field Members
 
 #region Default Class Constuctor
 public TbSubject()
 {
 _id = 0;
 _subjectname = String.Empty;
 }
 #endregion End of Default Class Constuctor
 
 #region Property Members
 /// <summary>
 ///
 /// </summary> 
 public virtual int ID
 {
 get { return _id; }
 set { _id = value; }
 }
  
 /// <summary>
 ///
 /// </summary> 
 public virtual string SubjectName
 {
 get { return _subjectname; }
 set { _subjectname = value; }
 }
  /// <summary>
  ///
  /// </summary> 
  public virtual ICollection Classes
  {
  get { return _classes; }
  set { _classes = value; }
  }
   
 #endregion End of Property Members
 }

对应映射文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 <class name="hicity_test.Models.TbSubject, hicity_test" table="Tb_Subject">
 <id name="ID" column="ID" type="System.Int32" unsaved-value="0">
 <generator class="identity" />
 </id>
 <property name="SubjectName" column="SubjectName" type="System.String" not-null="true" />
  <!--一个Subject对应多个class -->
  <set name="Classes" inverse="true" table="Tb_Class" cascade="all">
  <key column="SubjectID" foreign-key="FK_SubjectClass"/>
  <!--一个Subject对应多个class-->
  <one-to-many class="hicity_test.Models.TbClass, hicity_test" />
  </set>
 </class>
</hibernate-mapping>
类别(多)

public class TbClass
 {
 #region Field Members
 
 private int _id;
 private int _subjectid;
 private string _classname;


  private TbSubject _subject;
 #endregion End of Field Members
 
 #region Default Class Constuctor
 public TbClass()
 {
 _id = 0;
 _subjectid = 0;
 _classname = String.Empty;
 }
 #endregion End of Default Class Constuctor
 
 #region Property Members
 /// <summary>
 ///
 /// </summary> 
 public virtual int ID
 {
 get { return _id; }
 set { _id = value; }
 }
  
 /// <summary>
 ///
 /// </summary> 
 public virtual int SubjectID
 {
 get { return _subjectid; }
 set { _subjectid = value; }
 }
  
 /// <summary>
 ///
 /// </summary> 
 public virtual string ClassName
 {
 get { return _classname; }
 set { _classname = value; }
 }
  /// <summary>
  ///
  /// </summary> 
  public virtual TbSubject Subject
  {
  get { return _subject; }
  set { _subject = value; }
  }
  
  
 #endregion End of Property Members
 }
对应映射文件

 <?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 <class name="hicity_test.Models.TbClass, hicity_test" table="Tb_Class"> 
 <id name="ID" column="ID" type="System.Int32" unsaved-value="0">
 <generator class="identity" />
 </id>
  <!--
 <property name="SubjectID" column="SubjectID" type="System.Int32" />-->
 <property name="ClassName" column="ClassName" type="System.String" not-null="true" />
  <!--一个class属于一个Subject-->

  <many-to-one name="Subject" cascade="all"
  outer-join="auto"
  update="true"
  insert="true" column="SubjectID" 
  not-null="true" class="hicity_test.Models.TbSubject, hicity_test" foreign-key="FK_SubjectClass"/>
 </class>
</hibernate-mapping>

测试:

TbSubject subject=TbSubjectBLL.LoadById(1);
  foreach (TbClass model in subject.Classes)
  {
  String s=model.ClassName;
  };
 OK!