我拥有的是用户类,并说还有2个子类vipUser和regularUser。 在登录页面我想检查身份验证,我不知道它是vipUser还是regularUser ..如果它是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或者常规但是用户已经作为用户已经在缓存中而没有用于检查用户是什么类型的转换选项... 有什么建议吗?!
希望我很清楚..
谢谢!
答案 0 :(得分:1)
2个选项:多态或任意映射
多态性(抱歉是c#,但我不熟悉VB.NET)
class User
{
public virtual IsVip { get { return false; } }
}
class VipUser
{
public override IsVip { get { return true; } }
}
任意映射:您对所有用户
进行延迟加载引用的地方public EntityMap() { ReferencesAny(x => x.User) }
答案 1 :(得分:0)
is
或as
运算符进行检查。
var user = Authenticate("userid", "password");
var vipUser = user as vipUser;
if (vipUser != null) { RedirectToChampagneRoom(); }
也就是说,使用子类化的角色属性,即User.UserType,要容易得多。