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”。

我知道当我说“作为 System.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 回答