2009-11-10 3 views
0

У меня есть класс клиента, как что:Casting NHibernate Ленивые загруженные объекты (проблема Proxy)

public class Client{ 
    public Person Pers { get; set; } 
} 

И есть класс ребенка я 2 Person's:

public class PersonType1 : Person {...} 
public class PersonType2 : Person {...} 

Теперь я загрузил клиент. .. И мне нужно, чтобы получить PersonType1 или PersonType2 атрибуты ..

Я попробовал:

var _pj = ((PersonType1) _client.Pers); 

Но это не работает, потому что тип _client.Pers является (нагрузка Ленивый правда) Proxy ...

Есть ли способ сделать это? У меня есть несколько атрибутов в каждом PersonType, поэтому это не очень хорошая идея, чтобы создать виртуальный/переопределить для каждого атрибута (личностно> PersonType1) ...

Благодарности

+0

ли эту работу даже с ленивым = «ложь»? Если «Перс» является прокси-типом PersonType1, действие которого будет действовать по характеру полиморфизма. Я предполагаю, что он не возвращает «PersonType1», а «Person». – Trent

ответ

2

Вы могли бы попытаться охотно принести Pers свойство:

var client = session 
    .CreateCriteria<Client>() 
    .CreateCriteria("Pers", JoinType.LeftOuterJoin) 
    .Add(Expression.IdEq(1)) 
    .UniqueResult<Client>(); 
var pj = (PersonType1)client.Pers; 
0

При использовании NH на сервере, и перемещать объекты к клиенту, вы не можете использовать ленивую загрузку. Что NH знает (на сервере) не помогает клиенту, который не имеет ни сессии, ни знаний о том, как получить дополнительные данные по мере необходимости.

Смежные вопросы