我刚刚使用UserStore定义了一个实例,如下所示。
var store = new UserStore<ApplicationUser>(new ProjectEntities());
但得到以下错误
“project_name.Models.ApplicationUser”类型不能用作类型 泛型类型或方法'UserStore'中的参数'TUser'。 没有隐式引用转换 'project_name.Models.ApplicationUser'到 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'。
这是我在ApplicationUser
IdentityModel.cs
的方式
public class ApplicationUser : IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicationUser()
{
this.Id = Guid.NewGuid().ToString();
}
// custom User properties/code here
public string Full_Name { get; set; }
public string Gender { get; set; }
public async Task<ClaimsIdentity>GenerateUserIdentityAsync(ApplicationUserManager manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
答案 0 :(得分:1)
我认为错误是你做错了什么
您尝试传递ApplicationUser
,但UserStore
要求您使用Microsoft.AspNet.Identity.EntityFramework.IdentityUse
的类型,您可能应该从Microsoft.AspNet.Identity.EntityFramework.IdentityUse
扩展/继承ApplicationUser
类似
public class ApplicationUser : IdentityUser
答案 1 :(得分:0)
我不确定您为什么使用IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
代替IdentityUser
作为COLD TOLD指出,因为该签名的最常见用途是使用INT键而不是字符串。使用IdentityUser,默认情况下您将获得字符串键。
因此,假设您有其他理由使用该签名,则需要覆盖整个标识堆栈:IdentityUser,IdentityUserRole,IdentityRole,IdentityUserClaim,IdentityUserLogin,IdentityDbContext,UserStore和RoleStore。
所以UserStore会是:
public class ApplicationUserStore :
UserStore<ApplicationUser, ApplicationRole, int,
ApplicationUserLogin, ApplicationUserRole,
ApplicationUserClaim>, IUserStore<ApplicationUser, int>,
IDisposable
{
public ApplicationUserStore() : this(new IdentityDbContext())
{
base.DisposeContext = true;
}
public ApplicationUserStore(DbContext context)
: base(context)
{
}
}