Трудно понять, как лучше реализовать подклассы с помощью общего репозитория с помощью Fluent NHibernate.
У меня есть базовый класс и два подкласса, скажем:
public abstract class Person
{
public virtual int PersonId { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
public class Student : Person
{
public virtual decimal GPA { get; set; }
}
public class Teacher : Person
{
public virtual decimal Salary { get; set; }
}
Мои отображения следующие:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Table("Persons");
Id(x => x.PersonId).GeneratedBy.Identity();
Map(x => x.FirstName);
Map(x => x.LastName);
}
}
public class StudentMap : SubclassMap<Student>
{
public StudentMap()
{
Table("Students");
KeyColumn("PersonId");
Map(x => x.GPA);
}
}
public class TeacherMap : SubclassMap<Teacher>
{
public TeacherMap()
{
Table("Teachers");
KeyColumn("PersonId");
Map(x => x.Salary);
}
}
Я использую общий репозиторий для сохранения / получения / обновления сущностей, и он отлично работает - при условии, что я работаю с репозиторием - где я уже знаю, что я работаю со студентами или работаю с учителями. *
Проблема, с которой я сталкиваюсь, заключается в следующем: что происходит, когда у меня есть идентификатор и необходимо определить ТИП человека? Если пользователь заходит на мой сайт под именем PersonId = 23, как мне выяснить, к какому типу людей это относится?