nHibernate - Получение с частной коллекцией

Есть ли способ использовать Fetch с частной коллекцией?

Вот что у меня есть для кода:

public class Owner
{
    private ICollection<Cat> _cats = new List<Cat>();

    public virtual int Id { get; set; }

    public virtual IEnumerable<Cat> Cats { get { return _cats; } }

    public virtual void AddCat(Cat cat) { ... }
}

public class Cat
{
    public virtual int Id { get; set; } 

    public virtual string Name { get; set; }

    public virtual Owner Owner { get; set; }
}

Большую часть времени я хочу загружать коллекцию Cats лениво, но иногда я этого не делаю. Я хочу использовать Fetch в запросе Linq, чтобы загрузить его. В настоящее время я получаю исключение «Не удалось разрешить свойство: Кошки ...». Я предполагаю, что получил это, потому что у меня есть Set ("_ cats", ...) в моем ClassMapping, и он ищет свойство Cats для отображения. Есть ли способ заставить Fetch работать с частной коллекцией кошек?


person mekansm    schedule 30.05.2012    source источник


Ответы (2)


NHibernate генерирует прокси из ваших объектов, когда они загружаются из базы данных, поэтому свойства, которые вы хотите сопоставить, должны быть виртуальными. Вы должны сделать вашу частную коллекцию кошек защищенной виртуальной и попробовать еще раз. Я только сопоставил свойства с защищенным сеттером и общедоступным получателем, но это решение может также подходить с полностью защищенными свойствами.

person rumpelstiefel    schedule 30.05.2012

Вам необходимо указать nosetter стратегию доступа в сопоставлении свойств.

Подробнее см. В этом ответе: Модель домена с проблемой дизайна Nhibernate < / а>

person Miroslav Popovic    schedule 31.05.2012