NHibernate初學六之關聯多對多關係

1:建立三張表T_Course、T_Student、T_Middle;其中一個學生能夠對應多個課程,一個課程也能夠對應多個學生,用T_Middle存放它們的關係內容;html

複製代碼
CREATE TABLE [dbo].[T_Course](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CourseName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK_T_Course] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


CREATE TABLE [dbo].[T_Student](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    [StudentNum] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK_T_Student] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]


CREATE TABLE [dbo].[T_Middle](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [StudentID] [int] NULL,
    [CourseID] [int] NULL,
 CONSTRAINT [PK_T_Middle] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
複製代碼

2:實體的代碼,其中兩個類中都有IList,中間關係類就不用建立的:sql

複製代碼
    public class CourseModel
    {
        public virtual int Id { get; set; }
        public virtual string Coursename { get; set; }
        public virtual IList Students { get; set; }
    }

    public class StudentModel
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual string Studentnum { get; set; }
        public virtual IList Courses { get; set; }
    }
複製代碼

3:XML映射文件的內容app

3.1 CourseModel.hbm.xml文件的內容:ide

複製代碼
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Wujy.ModelLibrary" namespace="Wujy.ModelLibrary.Entity" xmlns="urn:nhibernate-mapping-2.2">
  <class name="CourseModel" table="T_Course" lazy="true" >
    <id name="Id" column="ID">
      <generator class="identity" />
    </id>
    <property name="Coursename">
      <column name="CourseName" sql-type="varchar" not-null="false" />
    </property>
    <bag name="Students" table="T_Middle" lazy="true" inverse="true">
      <key column="CourseID"></key>
      <many-to-many column="StudentID" class="StudentModel"></many-to-many>
    </bag>
  </class>
</hibernate-mapping>
複製代碼

3.2 StudentModel.hbm.xml文件的內容:spa

複製代碼
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Wujy.ModelLibrary" namespace="Wujy.ModelLibrary.Entity" xmlns="urn:nhibernate-mapping-2.2">
  <class name="StudentModel" table="T_Student" lazy="true" >
    <id name="Id" column="ID">
      <generator class="identity" />
    </id>
    <property name="Name">
      <column name="Name" sql-type="varchar" not-null="false" />
    </property>
    <property name="Studentnum">
      <column name="StudentNum" sql-type="varchar" not-null="false" />
    </property>
    <bag name="Courses" table="T_Middle" lazy="true" inverse="false">
      <key column="StudentID"></key>
      <many-to-many column="CourseID" class="CourseModel"></many-to-many>
    </bag>
  </class>
</hibernate-mapping>
複製代碼

注意:inverse:意思是反轉,它指明類之間的關係由誰來進行維護。例如:班級(Class類)與學生(Student),班級-學生就是one-to-many,學生-班級就是many-to-one。它只能在 one-to-many中many的一方進行設置(固然,在many一方,多是在<set>也多是在<bag>也多是在<array>中進行設置),而對於one方,是不進行Inverse設置的。在NHibernate 社區,inverse默認值爲false。.net


4: 主要代碼以下hibernate

複製代碼
        protected void Button1_Click(object sender, EventArgs e)
        {
            CourseModel coursemodel = new CourseModel();
            StudentModel studentModel = new StudentModel();
            coursemodel.Coursename = "軟件工程";
            int CID = CourseBll.NewAdd(coursemodel);
            
            studentModel.Name = "踏浪帥";
            studentModel.Studentnum = "20098991";
            studentModel.Courses = new List<CourseModel>();
            studentModel.Courses.Add(coursemodel);
            StudentBll.NewAdd(studentModel);
            
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            CourseModel coursemodel = new CourseModel();
            coursemodel.Coursename = "軟件工程";
            CourseBll.Add(coursemodel);
        }

        protected void Button3_Click(object sender, EventArgs e)
        {
            StudentModel model = StudentBll.findById(1);
            StudentBll.Remove(model);
        }
複製代碼

 

感謝您的閱讀,堅持天天進步一點點,離成功就更新一步;但願文章對您有所幫助;源代碼下載3d

轉載至:http://www.cnblogs.com/wujy/p/3602300.htmlcode

相關文章
相關標籤/搜索