Подтвердить что ты не робот

Проблема с использованием прокси-сервера при использовании таблицы NHibernate для каждой стратегии наследования подкласса

У меня есть абстрактный базовый класс и унаследованные объекты poco. Я использую таблицу для наследования подкласса с помощью бесплатного nhibernate 1.1 automapping.

Наследование класса выглядит следующим образом

Node (абстрактный класс) Место: Node Активы: Node

Node класс - это в основном древовидная структура.

 public abstract class Node 
    {
        public virtual int Id
        {
            get;
            set;
        }

        public virtual Node ParentNode
        {
            get;
            set;
        }

        public virtual ICollection<Node> ChildNodes
        {
            get;
            set;
        }
}

Теперь проблема заключается в том, когда я получаю объект Asset из базы данных и делаю objAsset.ParentNode, я могу использовать ParentNode для Asset или Place, но если я делаю что-то вроде objAsset.ParentNode.ParentNode.ParentNode, тогда ParentNode появляется как тип "{Castle.Proxies.NodeProxy}", и я не могу его отбросить на место или активы.

Я знаю, что в моем случае конечный результат должен быть типа Place, поскольку запись существует в базе данных в таблице Place, но по какой-то причине NHibernate не может ленить загрузить ее в фактический производный тип, базовый класс Node.

Любая идея?

В ожидании Набиль

4b9b3361

Ответ 1

Это хорошо объяснено здесь Ореном: http://ayende.com/Blog/archive/2009/09/03/answer-the-lazy-loaded-inheritance-many-to-one-association-orm.aspx

Вкратце, прокси-серверы наследуют от типа ассоциации, а не унаследованного типа, потому что это неизвестно до перехода к БД (и вы не можете изменить тип объекта)

Обновить: возможное обходное решение утечки ссылки на фактический объект в Node:

public virtual Node Self { get { return this; } }

Это даст вам базовый актив или место. Будьте осторожны с ним.