Предположим, у меня есть классы:
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, тип будет действительным:
var a = new this.Session.Get<Pet>(petId);
var person = this.Session.Get<Person>(personId);
// person.Pet as Cat != null
Есть ли способ сообщить NHibernate для инициализации этого свойства с допустимым типом?