我有两个基类学生和课程和一个子类 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”}
我知道通过连接子类创建相同的子类是不可能的.... 有人会告诉我应该怎样做才能在这种场景中实现多重继承......
提前致谢...
答案 0 :(得分:0)
在第一篇文章中我将清楚地表明,不可能通过NH中的join-subclass或subclass进行多重继承。
另一个人认为,在你加入的子类中,你所采用的例子是错误的(我认为是这样)
在连接的子类中你必须有一个像动物一样的父类,你可以将它继承到cat,dog等......使用join-subclass ......
关于你的例子,最好使用像 -
这样的法线贴图将Student_Course中的studID和CourseID视为复合,或者为Student_Course和StudID以及CustomerID获取PK
但根据我的exp,最佳做法是使用一对多关系进行复合。
希望这会对你有所帮助。