После вызова NHibernate.Initialize (proxyObject) я получаю неправильный objectType - PullRequest
0 голосов
/ 28 июля 2010

У меня есть иерархия объектов Parent-> Child (Ленивая загрузка по умолчанию установлена ​​в true) Теперь я загружаю все родительские объекты из базы данных.Все дочерние объекты будут иметь тип ChildProxyGUID.

, тогда я напишу

IList<Parent> parentList = NHibernateHelper.List<Parent>();
foreach(Parent parent in parentList)
{
  if(!NHibernateUtil.IsInitialized(parent.Child))
  {
    NHibernateUtil.Initialize(parent.Child);
    if(parent.Child.GetType() != typeof(Child)) //parent.Child.GetType() return me proxy type
      throw new ArgumentException("wrong type");
  }
}

Как я могу преобразовать parent.Child в реальный тип "Child".Мне нужен реальный тип (дочерний) из-за проверки системы.Этот пример прост в реальной жизни, у меня очень сложные сопоставления и отношения.

Есть идеи там?

1 Ответ

0 голосов
/ 02 августа 2010

Попробуйте с:

var realObject = session.GetSessionImplementation()
                        .PersistenceContext.Unproxy(parent.Child)

Однако, плохая идея, чтобы ваш код полагался на этот тип проверок, поскольку он нарушает LSP , создавая код, который сложнее поддерживать.

...