我刚刚使用UserStore定义了一个实例,如下所示。
var store = new UserStore<ApplicationUser>(new ProjectEntities());
但是得到以下错误
类型"project_name。Models.ApplicationUser' 不能用作类型 泛型类型或方法"用户存储"中的参数"TUser"。 没有隐式引用转换 "project_name。Models.ApplicationUser' to 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'.
这是我在IdentityModel.cs
中如何定义ApplicationUser
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;
}
}
我认为这个错误在你做错了什么方面非常清楚
您正在尝试传递ApplicationUser
,但UserStore
要求您使用您可能应该从Microsoft.AspNet.Identity.EntityFramework.IdentityUse
扩展/继承应用程序用户Microsoft.AspNet.Identity.EntityFramework.IdentityUse
的类型
类似的东西
public class ApplicationUser : IdentityUser
我不确定为什么你使用 IdentityUser<string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
而不是 COLD TOLD 指出的IdentityUser
,因为该签名最常见的用途是使用 INT 键而不是字符串。使用IdentityUser,默认情况下你会得到字符串键。
因此,假设您有其他原因使用该签名,您将需要覆盖整个身份堆栈:IdentityUser,IdentityUserRole,IdentityRole,IdentityUserClaim,IdentityUserLogin,IdentityDbContext,UserStore和RoleStore。
所以用户商店将是:
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)
{
}
}
请参阅 http://johnatten.com/2014/07/13/asp-net-identity-2-0-extending-identity-models-and-using-integer-keys-instead-of-strings/