【发布时间】:2011-03-22 08:45:55
【问题描述】:
假设我有课:
class Person
{
String FirstName;
String LastName;
Pet Pet;
}
class Pet
{
String Name;
Person Owner;
}
class Cat : Pet
{
Int32 MousesCaught;
}
class Dog : Pet
{
Int32 CatsCaught;
}
还有一个映射:
public class PetMap : IAutoMappingOverride<Pet>
{
public void Override(AutoMapping<Pet> mapping)
{
mapping.HasOne(x => x.Owner).PropertyRef(x => x.Pet).Constrained().Cascade.All();
mapping.JoinedSubClass<Cat>("PetId");
mapping.JoinedSubClass<Dog>("PetId");
}
}
问题是:如果数据库中有带猫或狗的人,则 Person.Pet 的类型为“Pet{PetBroxyBlaBlaBla}”。所以我不能将 Person.Pet 转换为 Cat (Person.Pet as Cat == null)。
var person = this.Session.Get<Person>(personId);
// person.Pet as Cat == null
但是如果我在得到 Person 之前从 DB 得到这个宠物,那么类型是有效的:
var a = new this.Session.Get<Pet>(petId);
var person = this.Session.Get<Person>(personId);
// person.Pet as Cat != null
有没有办法告诉 NHibernate 用一个有效的类型来初始化这个属性?
【问题讨论】:
标签: nhibernate fluent-nhibernate automapping one-to-one