0

私が持っているのは User クラスで、さらに 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か通常かを確認したいのですが、ユーザーがどのタイプであるかを確認するためのキャストオプションなしで、ユーザーが既にユーザーとしてキャッシュに入っていることです...助言がありますか?!

私が十分に明確だったことを願っています..

ありがとう!

4

2 に答える 2

1

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) }

于 2011-08-24T13:40:50.217 に答える
0

本気ですか?isユーザーオブジェクトは正しい具象型である必要があり、またはas演算子を使用して確認できる必要があります。

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

そうは言っても、サブクラス化するロールプロパティ、つまりUser.UserTypeを操作する方がはるかに簡単です。

于 2011-08-24T14:14:40.037 に答える