Приведение NHibernate Lazy загруженных объектов (проблема с прокси) - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть такой класс Client:

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

И у меня есть 2 класса для детей:

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

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

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

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

Но это не работает, потому что тип _client.Pers является Proxy (Lazy load true) ...

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 ноября 2009

Вы можете попытаться получить свойство Pers:

var client = session
    .CreateCriteria<Client>()
    .CreateCriteria("Pers", JoinType.LeftOuterJoin)
    .Add(Expression.IdEq(1))
    .UniqueResult<Client>();
var pj = (PersonType1)client.Pers;
0 голосов
/ 10 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...