nhibernate中的多重继承与连接的子类

时间:2012-02-17 06:47:46

标签: nhibernate nhibernate-mapping

我有两个基类学生课程和一个子类 StudentCourse ,它们继承了这两个基类的属性。

是否可以使用Joined子类进行此类继承?

我尝试过为学生课程课程创建界面,如下所示:

public interface StudentInterface
    {
        Int32 StudentId { get; set; }

    }

 public interface InterfaceCourse
    {

        Int32 CourseId { get; set; }

    }

student.cs代码

它实现了StudentInterface

public class Student:StudentInterface 
    {
        [Key]
        public virtual Int32 **StudentId** { get; set; }
        public virtual string StudentName { get; set; }
        public virtual  DateTime Dob { get; set; }
        public virtual string Gender { get; set; }
        public virtual string Email { get; set; }
}

course.cs的代码

public class Course:InterfaceStudentCourse
    {
        [Key]
        public virtual Int32 **CourseId** { get; set; }
        public virtual string Name { get; set; }
    }

studentCourse.cs的代码 它实现了基类Student和Course 在这里,我想让StudentCourse拥有自己的主键,而不是它应该是超类主键。它们应该是外来的,如下面的StudentCourse.cs所示

public class StudentCourse:StudentInterface,InterfaceCourse
    {
        [Key]
        public virtual Int32 **StudentCourseId** { get; set; }
        public override Int32  StudentId { get; set; }
        public virtual Int32 CourseId { get; set; }
   }

映射文件是:

StudentInterface.hbm.xml

<class name ="StudentInterface" table="StudentInterface" >
    <id name="StudentId" type="Int32" column="StudentId" >
      <generator class="native"/>
    </id>

    <joined-subclass name="Student">
      <key column="StudentId"/>
      <property name="StudentName"/>
      <property name="Dob"/>
      <property name="Gender"/>
      <property name="Email"/>
*// Need this subclass in both Student and course.....but giving duplication entity error*
      **<joined-subclass name="StudentCourse">
        <key column="StudentCourseId"/>
        <property name="StudentId"/>
        <property name="CourseId"/>
     </joined-subclass>**

    </joined-subclass>

  </class>

CourseInterface.hbm.xml

<class name ="InterfaceCourse" table="InterfaceCourse" >
    <id name="CourseId" type="Int32" column="CourseId" >
      <generator class="native"/>
    </id>


    <joined-subclass name ="Course" >
      <key column="CourseId"/>
      <property name="Name"/>
   *// Need this subclass in both Student and course.....but giving duplication entity error*
**<joined-subclass name="StudentCourse">
            <key column="StudentCourseId"/>
            <property name="StudentId"/>
            <property name="CourseId"/>
         </joined-subclass>**
    </joined-subclass>
  </class>

所以问题是当我在一个基类中使StudentCourse加入子类时,它会给出如下错误:

{“无法在”Core.Model.StudentCourse“课程中找到属性'StudentName'的获取者”}

当我让StudentCourse加入两个基类(学生,课程)的子类时,那么错误就像:

{“重复的类/实体映射Core.Model.StudentCourse”}

我知道通过连接子类创建相同的子类是不可能的.... 有人会告诉我应该怎样做才能在这种场景中实现多重继承......

提前致谢...

1 个答案:

答案 0 :(得分:0)

在第一篇文章中我将清楚地表明,不可能通过NH中的join-subclass或subclass进行多重继承。

另一个人认为,在你加入的子类中,你所采用的例子是错误的(我认为是这样)

在连接的子类中你必须有一个像动物一样的父类,你可以将它继承到cat,dog等......使用join-subclass ......

关于你的例子,最好使用像 -

这样的法线贴图

将Student_Course中的studID和CourseID视为复合,或者为Student_Course和StudID以及CustomerID获取PK

但根据我的exp,最佳做法是使用一对多关系进行复合。

希望这会对你有所帮助。