Множественное наследование в nhibernate с объединенным подклассом - PullRequest
1 голос
/ 17 февраля 2012

У меня есть два базовых класса Student и Course и один подкласс StudentCourse , которые наследуют свойства этих двух базовых классов.

Is itМожно ли сделать такое наследование с присоединенным подклассом?

Я пытался создать интерфейсы для обоих классов Student и Course , как показано ниже:

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 только в одномse class, то выдает ошибку вроде:

{"Не удалось найти получатель для свойства 'StudentName' в классе 'Core.Model.StudentCourse'"}

и когда я сделал StudentCourse присоединился к подклассу в обоих базовых классах (студент, курс), то ошибка, например:

{"Дублирование отображения классов / сущностей Core.Model.StudentCourse "}

Я знаю, что создание одного и того же подкласса с помощью объединенного подкласса невозможно ... Кто-нибудь, пожалуйста, скажите мне, что мне следует сделать, чтобы в таком сценарии стало возможным множественное наследование .....

Заранее спасибо ...

1 Ответ

0 голосов
/ 17 февраля 2012

сначала я укажу вам, что невозможно выполнить множественное наследование по объединенному подклассу или подклассу в NH.

другое мнение в отношении присоединенного подкласса: пример, который вы берете, неверен(я так думаю)

в объединенном подклассе у вас должен быть родительский класс, такой как animal, и вы можете наследовать его для cat, dog и т. д., используя объединенный подкласс ...

о вашемНапример, лучше всего использовать нормальное сопоставление, например -

, принять StudID и CourseID в Student_Course как составные или взять PK для Student_Course и StudID и CustomerID

, но согласноМой опыт, это лучшая практика - создавать композит с отношениями один-ко-многим ..

надеюсь, это поможет вам.

...