我试图覆盖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]'to 输入'System.Web.Security.MembershipUser'。
我知道当我说“As System.Web.Security.MembershipUser”时它会返回相同的类型,所以我应该改变它还是应该尝试以某种方式进行转换?感谢。
答案 0 :(得分:3)
你真的错了。你不能只是随意地把东西扔进去。它们实际上必须是你投射它的东西。
您应该做的只是从GetUser方法返回ProviderUserKey,然后使用它来在会员系统之外的用户表中查找您想要的任何其他数据。
编辑:
var userid = (Guid)Membership.GetUser().ProviderUserKey; // cast to your type
var user = db.Tbl_Employees.Where(x => x.UserId == userid);
答案 1 :(得分:1)
GetUser期待一种MembershipUser。你正在返回一些不是从那个对象派生的东西,所以它会抱怨。
您必须将实体映射到继承自MembershipUser的自定义对象,或者创建一个新对象,并传入适当的参数。