0

MembershipProviderのGetUser関数をオーバーライドして、データベースからプロパティにアクセスできるようにユーザーを取得しようとしています。私はこれを試しました:

Public Overloads Overrides Function GetUser(username As String, userIsOnline As Boolean) As System.Web.Security.MembershipUser
    Dim user = db.Tbl_Employees.Where(Function(u) u.Employee_EmailAddress = username)
    Return user
End Function

ただし、次のエラーが発生します。

タイプ「System.Data.Entity.Infrastructure.DbQuery`1[MyBlog.Tbl_Employee]」のオブジェクトをタイプ「System.Web.Security.MembershipUser」にキャストできません。

「AsSystem.Web.Security.MembershipUser」と言うと同じタイプが返されることを理解しているので、それを変更する必要がありますか、それとも何らかの方法でキャストする必要がありますか?ありがとう。

4

2 に答える 2

3

あなたはこれについて完全に間違っています。物事をランダムに他のものにキャストすることはできません。彼らは実際にあなたがそれをキャストしているものでなければなりません。

GetUserメソッドからProviderUserKeyを返し、それを使用して、メンバーシップシステムの外部で、ユーザーテーブルに必要な他のデータを検索するだけです。

編集:

var userid = (Guid)Membership.GetUser().ProviderUserKey;  // cast to your type 

var user = db.Tbl_Employees.Where(x => x.UserId == userid);
于 2012-09-04T18:24:06.987 に答える
1

GetUserは、あるタイプのMembershipUserを期待しています。そのオブジェクトから派生していないものを返しているので、文句を言います。

MembershipUserから継承するカスタムオブジェクトにエンティティをマップするか、適切なパラメータを渡して新しいオブジェクトを作成する必要があります。

于 2012-09-04T18:18:13.773 に答える