具有连接子类的nhibernate中的多重遗传

具有连接子类的nhibernate中的多重遗传,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有两个基类Student和Course,还有一个子类StudentCourse,它们继承了这两个基类的属性 有可能对连接的子类进行这样的继承吗 我尝试为学生和课程创建界面,如下所示: public interface StudentInterface { Int32 StudentId { get; set; } } public interface InterfaceCourse { Int32 CourseId { get;

我有两个基类StudentCourse,还有一个子类StudentCourse,它们继承了这两个基类的属性

有可能对连接的子类进行这样的继承吗

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

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

    }

 public interface InterfaceCourse
    {

        Int32 CourseId { get; set; }

    }
student.cs的代码

public class Course:InterfaceStudentCourse
    {
        [Key]
        public virtual Int32 **CourseId** { get; set; }
        public virtual string Name { get; set; }
    }
它实现了学生界面

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; }
}
课程代码.cs

public class Course:InterfaceStudentCourse
    {
        [Key]
        public virtual Int32 **CourseId** { get; set; }
        public virtual string Name { get; set; }
    }
学生课程代码.cs 它实现了基类和学生课程 这里我想让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”的getter}

当我让StudentCourse在两个基类(student,course)中加入子类时,错误如下:

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

我知道用连接的子类创建相同的子类是不可能的。。。。 有没有人能告诉我,在这种情况下,我应该怎么做才能使多重继承成为可能


提前感谢…

首先,我要澄清的是,通过连接的子类或NH中的子类进行多重继承是不可能的

关于连接子类的另一个想法,您所举的例子是错误的(我认为是这样)

在连接的子类中,u必须有一个父类,如animal,您可以将其继承给猫、狗等。通过使用连接的子类

关于您的示例,最好使用法线映射,如--

将学生课程中的studID和CourseID作为复合项或对学生课程、studID和CustomerID进行PK

但根据我的经验,制作一对多关系的复合材料是最好的做法


希望这能对你有所帮助。

谢谢Steav…你澄清了我的疑问…现在我把StudentCourseId作为Pk,Studentid和courseId作为FK…它成功了。。。。