您好
简而言之,我有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是否可用。但我觉得某处应该出错!
我错过了什么吗?任何想法?