Свободное общение с базовым классом - PullRequest
0 голосов
/ 22 марта 2011

Предположим, у меня есть классы:

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 для инициализации этого свойства с допустимым типом?

1 Ответ

1 голос
/ 22 марта 2011

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

...