如何解决如何在 OnModelCreating 中调用非静态类来播种用户身份?
我正在尝试在 OnModelCreating
中进行用户身份播种。
首先:ApplicationDbInitializer
是专门用于使用 UserManager
为用户播种的类,如下所示:
public class ApplicationDbInitializer
{
public UserManager<AppUser> userManager { get; set; }
public ApplicationDbInitializer(UserManager<AppUser> _userManager)
{
userManager = _userManager;
}
public void SeedUsers()
{
string Email = Environment.GetEnvironmentvariable("Email");
if (userManager.FindByEmailAsync(Email).Result == null)
{
AppUser user = new AppUser
{
Id = seedingIDs.ManagerID,Name = Environment.GetEnvironmentvariable("Name"),UserName = "test",normalizedUserName = "test".toupper(),PhoneNumber = Environment.GetEnvironmentvariable("Phone"),PhoneNumberConfirmed = true,Email = Email,normalizedEmail = Email.toupper(),EmailConfirmed = true,Bio = "...",Pic = "/assets/img/Me.jpg",Title = "Full-Stack Web Developer",IsManager = true,PasswordHash = "test@123",};
IdentityResult result = userManager.CreateAsync(user,"adrg*&$IUHB475").Result;
if (result.Succeeded)
{
userManager.AddToRoleAsync(user,"Admin").Wait();
}
}
}
}
OnModelCreating
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyConfiguration(new seedingRoles());
//builder.Entity<AppUser>().HasData(Initialize);
ApplicationDbInitializer.SeedUsers();
builder.Entity<IdentityUserRole<string>>().HasData(new IdentityUserRole<string>
{
RoleId = seedingIDs.RoleID,UserId = seedingIDs.ManagerID
});
builder.ApplyConfiguration(new seedingCategories())
.ApplyConfiguration(new seedingBootstrapCategory())
.ApplyConfiguration(new seedingTopics())
.ApplyConfiguration(new seedingBootstrapTool())
.ApplyConfiguration(new seedingPosts());
}
问题:我收到此错误,如下所示
ApplicationDbInitializer
类是静态的还是非静态的都不是问题,但我需要将它包含到 OnModelCreating
中。
解决方法
谢谢你们 Progman 和 Ali。我找到了另一个解决方案。
我不确定,但似乎在 OnModelCreating 中使用 UserManager 不是首选。
无论如何,我改用 ModelBuilder 来启动用户身份数据。
首先:我创建了一个包含用户数据的静态类,如下所示。
public static class Initialize
{
public static AppUser Manager(string UserName,string Password)
{
string Email = "your email here";
string Name = "your name";
string PhoneNumber = "your phone";
AppUser AdminUser = new AppUser {
Id = Guid.NewGuid(),Name = Name,UserName = UserName,NormalizedUserName = UserName.ToUpper(),PhoneNumber = PhoneNumber,PhoneNumberConfirmed = true,Email = Email,NormalizedEmail = Email.ToUpper(),EmailConfirmed = true,Bio = "...",Pic = "/assets/img/Me.jpg",Title = "...",IsManager = true,PasswordHash = Password
};
//PasswordHasher<AppUser> ph = new PasswordHasher<AppUser>();
//AdminUser.PasswordHash = ph.HashPassword(AdminUser,Password);
return AdminUser;
}
}
注意:出于某种原因,我发现使用环境来获取变量,例如 以下,仅在运行时工作,但在运行时返回 null 执行添加迁移。
string Email = Environment.GetEnvironmentVariable("MyEmail");
下一步:我在 OnModelCreating 中使用 ModelBuilder 通过调用 Initialize 类为该用户提供种子
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<AppUser>().HasData(Initialize.Manager("test","test@123"));
builder.Entity<IdentityUserRole<string>>().HasData(new IdentityUserRole<string>
{
RoleId = SeedingIDs.RoleID,UserId = SeedingIDs.ManagerID
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。