NHibernate не может правильно извлечь typeof производного класса - PullRequest
0 голосов
/ 16 февраля 2011

Здравствуйте
Коротко и точно, у меня есть 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.но я думаю, что-то должно быть где-то не так!

я что-то пропустил?есть идеи?

1 Ответ

0 голосов
/ 16 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...