NHibernate - 如何解决来自nhibernate缓存的转换问题?

时间:2011-08-24 07:39:52

标签: nhibernate nhibernate-criteria

我拥有的是用户类,并说还有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或者常规但是用户已经作为用户已经在缓存中而没有用于检查用户是什么类型的转换选项... 有什么建议吗?!

希望我很清楚..

谢谢!

2 个答案:

答案 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)

你确定吗?用户对象应该是正确的具体类型,您应该能够使用isas运算符进行检查。

var user = Authenticate("userid", "password");
var vipUser = user as vipUser;
if (vipUser != null) { RedirectToChampagneRoom(); }

也就是说,使用子类化的角色属性,即User.UserType,要容易得多。