NHibernate - как решить проблему приведения из кэша nhibernate? - PullRequest
0 голосов
/ 24 августа 2011

У меня есть класс User и говорят, что есть еще 2 подкласса vipUser и normalUser. на странице входа в систему я хочу проверить аутентификацию, и я не знаю, является ли это vipUser или normalUser .. если это vip, перенаправление происходит в одно место, и если оно регулярно в другое место. метод аутентификации должен быть в классе User для некоторой резоны - как это:

 Function Authenticate(ByVal username As String, ByVal password As String) As User Implements IMindriUserDao.Authenticate
        Return MyBase.GetUniqueByCriteria(Restrictions.Where(Of User)(Function(x) x.Username = username AndAlso x.Password = password))
 End Function

проблема в том, что после того, как я получаю от nhibernate аутентификацию с Пользователем, теперь я хочу проверить, является ли он vip или обычным, но пользователь уже находится в кеше как Пользователь без опции приведения, чтобы проверить, какой тип Пользователь ... есть предложения?!

Надеюсь, я был достаточно ясен ..

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 августа 2011

2 варианта: полиморфизм или произвольное отображение

Полиморфизм (извините за то, что я c #, но я не владею VB.NET)

class User
{
    public virtual IsVip { get { return false; } }
}

class VipUser
{
    public override IsVip { get { return true; } }
}

Any-Mapping: везде, где вы лениво загружали ссылку на пользователя

public EntityMap () {ReferencesAny (x => x.User)}

0 голосов
/ 24 августа 2011

Ты уверен?Пользовательский объект должен иметь правильный конкретный тип, и вы должны быть в состоянии использовать операторы is или as для проверки., т.е. User.UserType.

...