NHibernate无法正确检索派生类的类型

时间:2011-02-16 08:24:49

标签: nhibernate inheritance fluent-nhibernate

您好
简而言之,我有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
        }

有几种方法可以摆脱这个问题。例如,我可以检查表JobTypeX或JobTypeY中的JobBaseId是否可用。但我觉得某处应该出错!

我错过了什么吗?任何想法?