Этот вопрос действительно должен установить, возможно ли то, чего я пытаюсь достичь.
У меня есть три таблицы, я опущу реальные имена, чтобы они были простыми и менее запутанными
так что у нас есть
человек [
ПИД - уникальный идентификатор ПК
]
Заявитель
[
ПИД - уникальный идентификатор ПК,
ПОМОЩЬ - varchar (20)]
Student
[
ПИД - уникальный идентификатор ПК,
SID - int]
таблицы учеников и кандидатов связаны с таблицей лиц с отношением один к одному (где первичный ключ хранится в таблице сотрудников), но не связаны друг с другом.
У меня есть следующие доменные объекты
public class Person
{
public virtual Guid PID{get;set;}
}
public class Applicant: Person
{
public virtual string AID {get;set;}
}
public class Student:Person
{
public virtual int SID {get;set;}
}
Каждый из них имеет класс карты, производный от ClassMap или SubClassMap
public class PersonMap: ClassMap<Person>
{
public PersonMap()
{
Id(x => x.PID).GeneratedBy.Assigned();
Table("Person");
}
}
public class ApplicantMap: SubclassMap<Applicant>
{
public ApplicantMap()
{
Table("Applicant");
KeyColumn("PID");
Map(x => x.AID);
}
}
public class StudentMap:SubclassMap<Student>
{
public StudentMap()
{
Table("Student");
KeyColumn("PID");
Map(x => x.SID);
}
}
Мой вопрос: возможно ли иметь человека, который является кандидатом и студентом одновременно? В терминах базы данных у меня может быть строка в каждой таблице, которая содержит один и тот же PID, nhibernate позволит мне сохранить и восстановить все три объекта?
одна из проблем, которую я пытаюсь вставить в студента, когда идентификатор уже существует для заявителя и, конечно, человека.
public void MakePersonAStudent(Person p)
{
Student newStudent = new Student();
newStudent.PID = p.PID;
newStudent.SID = getNewStudentID();
Session.Save(newPerson);
}
Создано исключение:
другой объект с тем же значением идентификатора уже был связан с сеансом .... 73e5fd90-c27a-49d8-87dc-cd6413c120a2, объекта: Student