【问题标题】:Unable to cast object to type MembershipUser无法将对象强制转换为 MembershipUser 类型
【发布时间】:2012-08-29 10:42:41
【问题描述】:

我试图重写 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”时它返回相同的类型,所以我应该改变它还是应该尝试以某种方式转换它?谢谢。

【问题讨论】:

    标签: asp.net-mvc vb.net asp.net-mvc-3 asp.net-membership


    【解决方案1】:

    你完全错了。您不能只是将事物随机化为其他事物。他们必须真正成为你要投射的东西。

    您应该做的只是从您的 GetUser 方法返回 ProviderUserKey,然后使用它在会员系统之外的用户表中查找您想要的任何其他数据。

    编辑:

    var userid = (Guid)Membership.GetUser().ProviderUserKey;  // cast to your type 
    
    var user = db.Tbl_Employees.Where(x => x.UserId == userid);
    

    【讨论】:

    • 你说“What you should be doing is simply returning the ProviderUserKey from your GetUser method and then using that to lookup whatever other data you want in your user table, outside of the membership system.”时我不明白,你能告诉我你的意思是我应该做什么吗?
    • @user1477388 - 这很不言自明。调用 GetUser。从会员提供者返回的 MembershipUser 中获取 ProviderUserKey,使用普通数据库方法通过 ProviderUserKey 查找您的用户。
    • 我似乎没有ProvideUserKey的任何方法。这么简单,能发个例子吗?
    • 所以这看起来像是在控制器中使用。我不应该对 CustomMembershipProvider 中的 GetUser 方法做任何事情?
    • @user1477388 - 为什么你有自定义会员提供者?
    【解决方案2】:

    GetUser 需要一种 MembershipUser。你返回的东西不是从那个对象派生的,所以它会抱怨。

    您必须将实体映射到从 MembershipUser 继承的自定义对象中,或者创建一个新对象,并传入适当的参数。

    【讨论】:

    • 你能给我举个例子吗?我不能从我的自定义 Employee 模型中将返回类型从 MembershipUser 更改为“Employee”,还是不建议这样做?
    • 您不能更改返回类型,因为它必须与基类具有相同的签名。
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多