Здравствуйте
Коротко и точно, у меня есть 3-уровневое наследование:
public class JobBase
{
virtual public Guid Id { get; set; }
// Some properties here
}
public class Job:JobBase
{
// Some properties here
}
public class JobTypeX : Job
{
// Some properties here
}
public class JobTypeY : Job
{
// Some properties here
}
Отображения:
public class JobBaseMap : ClassMap<JobBase>
{
public JobBaseMap()
{
Id(p => p.Id);
//other mappings
}
}
public class JobMap : SubclassMap<Job>
{
public JobMap()
{
KeyColumn("JobBaseId");
//other mappings
}
}
public class JobTypeXMap : SubclassMap<JobTypeX>
{
public JobTypeXMap()
{
KeyColumn("JobBaseId");
//other mappings
}
}
public class JobTypeYMap : SubclassMap<JobTypeY>
{
public JobTypeYMap()
{
KeyColumn("JobBaseId");
//other mappings
}
}
Другой класс, который использует Job
public class Person
{
virtual public Guid Id { get; set; }
virtual public Job MyJob { get; set; }
}
хорошо, когда я хочу добавить нового человека, я пишу что-то вроде:
Person person = new Person();
//set other properties
//jobId can be either JobTypeX's id or JobTypeY's id
person.MyJob = Repository<Job>.Get(jobId);
//surely, one of conditions is true
if (person.MyJob is JobTypeX)
{
//do something
}
else if (person.MyJob is JobTypeY)
{
//do sth else here
}
Repository<Person>.Save(person);
Пока все хорошо.Он загружает те же данные с помощью кода ниже:
Person person = Repository<Person>.Get(personId);
Несмотря на то, что все значения person.MyJob верны, когда человек загружен, он больше не может распознавать тип задания:
if (person.MyJob is JobTypeX) // false
{
//do something
}
else if (person.MyJob is JobTypeY) // false
{
//do sth else here
}
Есть несколько способов избавиться от этой проблемы.Например, я могу проверить, доступен ли JobBaseId в таблице JobTypeX или JobTypeY.но я думаю, что-то должно быть где-то не так!
я что-то пропустил?есть идеи?