беглый nhibernate один к одному с базовым классом

Допустим, у меня есть классы:

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

Но если я получу этого питомца из БД до получения человека, тип действителен:

    var a = new this.Session.Get<Pet>(petId);
    var person = this.Session.Get<Person>(personId);
    // person.Pet as Cat != null

Есть ли способ указать NHibernate для инициализации этого свойства с допустимым типом?


person Serhiy    schedule 22.03.2011    source источник


Ответы (1)


Попробуйте отключить отложенную загрузку. Это может быть вызвано это

person Sly    schedule 22.03.2011