如何在 OnModelCreating 中调用非静态类来播种用户身份?

如何解决如何在 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());

    }

问题:我收到此错误,如下所示

enter image description here

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?