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