我正在尝试使用初始用户和用户角色为我的数据库设定种子,并且遇到了这样的问题。在审查了SO上的类似帖子后,我最终在我的种子方法中得到了以下内容:
if (!context.Users.Any(u => u.UserName == "founder"))
{
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store);
var user = new ApplicationUser {UserName = "founder"};
manager.Create(user, "ChangeItAsap!");
manager.AddToRole(user.Id, "AppAdmin");
}
和我的ApplicationUser类:
public class ApplicationUser : IdentityUser<int, CustomUserLogin,CustomUserRole,CustomUserClaim>
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
我的问题是我在ApplicationUser
上遇到编译错误
RecipeManager.Models.ApplicationUser类型不能用作泛型类型或方法
的隐式引用转换'UserManager<TUser>'
中的类型参数“TUser”。没有从RecipeManager.Models.ApplicationUser
到Microsoft.AspNet.Identity.IUser<string>
答案 0 :(得分:1)
ApplicationUser
必须实现IUser<string>
接口。这是用户管理器中允许的类型。该问题很可能与密钥的string
数据类型有关。默认的脚手架过程假定为string
,因为它是更通用的数据类型。您需要将ApplicationUser
类中的键类型更改为字符串,或继承IUser<int>
或您在UserManager
中使用的任何类型。