为什么我的 IdentityRoles 和 ApplicationUsers 没有填充到我的数据库中?

2024-02-15

我在 .net core 3.1 Web 应用程序中播种用户时遇到问题。正在 SQL Server 上创建相应的表,但当我运行应用程序时没有创建任何行。我不知道为什么数据库没有被填充。有人能发现这个问题吗?

DBInitializer 文件将用户种子植入数据库

public class DBInitializer
{
    public static async Task Initialize(IServiceProvider services)
    {
        ApplicationDbContext database = services.GetRequiredService<ApplicationDbContext>();

        UserManager<ApplicationUser> userManager = services.GetRequiredService<UserManager<ApplicationUser>>();

        RoleManager<IdentityRole> roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();

        string roleA = "A";
        string roleB = "B";

        if (!database.Roles.Any())
        {
            IdentityRole role = new IdentityRole(roleA);
            await roleManager.CreateAsync(role);
            IdentityRole roleOne = new IdentityRole(roleB);
            await roleManager.CreateAsync(roleOne);
            await database.SaveChangesAsync();
        }

        if (!database.ApplicationUsers.Any())
        {

            AppUserA appUser = new AppUserA("App", "UserA", "AppUse[email protected] /cdn-cgi/l/email-protection",
                "306.000.0001", "AppUserA1");
            await userManager.CreateAsync(appUser);
            await userManager.AddToRoleAsync(appUser, roleA);

            AppUserB appUserFour = new AppUserB("App", "UserB1", "[email protected] /cdn-cgi/l/email-protection",
                "306.000.0001", "AppUserB1");
            await userManager.CreateAsync(appUserFour);
            await userManager.AddToRoleAsync(appUserFour, roleA);
           await database.SaveChangesAsync();
        }

扩展 Asp.net IdentityUser 类的 ApplicationUser 类

public class ApplicationUser : IdentityUser
{
    public String FirstName { get; set; }
    public String LastName { get; set; }

    public String FullName => FirstName + " " + LastName;

    public ApplicationUser()
    {
    }

    public ApplicationUser(string firstName, string lastName, string email, string phoneNumber, string password)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Email = email;
        this.PhoneNumber = phoneNumber;
        this.UserName = email;
        PasswordHasher<ApplicationUser> passwordHasher = new PasswordHasher<ApplicationUser>();
        this.PasswordHash = passwordHasher.HashPassword(this, password);

        this.SecurityStamp = Guid.NewGuid().ToString();
    }

AppUser扩展applicationuser的类

 public class AppUserA : ApplicationUser
{
    public AppUserA()
    {
    }

    public AppUserA(string firstName, string lastName, string email, string phoneNumber, string password)
        : base(firstName, lastName, email, phoneNumber, password)
    {
    }
}

ApplicationDBContext 文件:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{

    public DbSet<ApplicationUser> ApplicationUsers { get; set; }

    public DbSet<AppUserA> AppUserAs { get; set; }

    public DbSet<AppUserB> AppUserBs { get; set; }


    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {

    }


}

这是一个工作演示,如下所示:

1.Model:

public class ApplicationUser : IdentityUser
{
    public String FirstName { get; set; }
    public String LastName { get; set; }

    public String FullName => FirstName + " " + LastName;

    public ApplicationUser()
    {
    }

    public ApplicationUser(string firstName, string lastName, string email, string phoneNumber, string password)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Email = email;
        this.PhoneNumber = phoneNumber;
        this.UserName = email;
        PasswordHasher<ApplicationUser> passwordHasher = new PasswordHasher<ApplicationUser>();
        this.PasswordHash = passwordHasher.HashPassword(this, password);

        this.SecurityStamp = Guid.NewGuid().ToString();
    }
}
public class AppUserA : ApplicationUser
{
    public AppUserA()
    {
    }

    public AppUserA(string firstName, string lastName, string email, string phoneNumber, string password)
        : base(firstName, lastName, email, phoneNumber, password)
    {
    }
}
public class AppUserB : ApplicationUser
{
    public AppUserB()
    {
    }

    public AppUserB(string firstName, string lastName, string email, string phoneNumber, string password)
        : base(firstName, lastName, email, phoneNumber, password)
    {
    }
}

2.程序.cs:

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        CreateDbIfNotExists(host);
        host.Run();
        //CreateHostBuilder(args).Build().Run();
    }
    private static async Task CreateDbIfNotExists(IHost host)
    {
        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;

            try
            {
                 await DBInitializer.Initialize(services);
            }
            catch (Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "An error occurred creating the DB.");
            }
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

3.启动.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser,IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddControllersWithViews();
    services.AddRazorPages();
}

Result: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 IdentityRoles 和 ApplicationUsers 没有填充到我的数据库中? 的相关文章

随机推荐

  • 为什么调用shared_from_this会调用std::terminate

    考虑这段代码 class A public std enable shared from this a public std shared ptr a f return shared from this int main A a std s
  • 实体框架:全局禁用删除

    我们正在开始一个新的应用程序 我们想使用实体框架 我们很少担心意外删除sql行 特别是意外设置相关数据等 我想禁用每个删除 因为我们只是用 validUntil 列标记每一行并且从不删除行 I saw 它可以通过 sql 中的角色来完成 h
  • 如何以编程方式更改 RecyclerView 中项目的位置?

    有没有办法将特定项目移动到特定位置RecyclerView using LinearLayoutManager以编程方式 你可以这样做 一些活动 片段 无论什么 List
  • 为什么连接字符串不适用于 EF 迁移?

    我创建了一个与 NuGet Gallery 实现一起使用的数据库 我可以在 sql manager 2012 中看到数据库 并且可以使用我的连接字符串从我编写的测试程序访问它 但是 当我尝试在包管理器控制台中运行 Update Databa
  • VB 中的类与模块

    在 VB 中使用模块而不是类有什么优势 如果有的话 它们有何不同 使用模块有哪些优点 缺点 在 VB 或 VB NET 中 我两者都使用 A Modules and B 类只有Shared功能 解决同样的问题 两者都可以让你从逻辑上grou
  • 删除所有早于 X 天的文件,但至少保留 Y 个最新的文件[重复]

    这个问题在这里已经有答案了 我有一个脚本 可以从备份目录中删除早于 X 21 天的数据库转储 DB DUMP DIR var backups dbs RETENTION 21 24 60 3 weeks find DB DUMP DIR t
  • 代号一个应用程序中的额外侧边菜单

    在我的应用程序中 我有一个右侧菜单 但似乎还有一个左侧菜单 仅包含后退按钮 没有菜单按钮 带有三条水平线 但如果触摸屏幕左边缘并拖动 则会出现菜单 我不明白为什么要创建它 但是有什么方法可以禁用或删除它吗 None
  • 在 PHP 中查找多个字符串位置

    我正在编写一个解析给定 URL 的 PHP 页面 我能做的就是仅找到第一个出现的值 但是当我回显它时 我得到另一个值而不是给定的值 这就是我到目前为止所做的 我知道可以使用循环 但我不知道循环体的条件 我怎
  • 在从 PHP 发送的电子邮件中使用 HTML 格式

    如何通过 PHP 脚本发送 HTML 格式 由于某种原因 它总是显示为 b Example b 代替Example 我确信我必须在某个地方包含 HTML 标头 我只是不知道需要做什么 我是一个十足的 PHP 菜鸟 这是我的 PHP 脚本 相
  • Jupyter笔记本导入错误:没有名为tornado.log的模块

    我已经安装了 jupyter 当尝试启动它时 出现以下错误 File Library Frameworks Python framework Versions 2 7 bin jupyter notebook line 7 in
  • 防病毒软件说我的程序可疑

    我在 wpf Visual Studios 中构建了一个程序 当我运行它时 avast 说检测到可疑程序 然后关闭我的程序 我可以采取任何措施来验证它 还是必须进入 avast 并将其设置为不阻止我的程序 您当然可以在大多数主要防病毒软件包
  • 获取 json 数组的下一个和上一个元素

    我的代码需要帮助 我想要一个上一个和一个下一个按钮 这些按钮将调用函数 viewBlogItem direction cat blogid 在该函数中 我将读出 json 文件 并按 类别 进行分类 每个 blogItem 都有一个arti
  • 机器码对齐

    我正在尝试了解机器代码对齐的原理 我有一个汇编器实现 可以在运行时生成机器代码 我在每个分支目标上使用 16 字节对齐 但看起来这不是最佳选择 因为我注意到 如果我删除对齐 有时相同的代码会运行得更快 我认为这与缓存线宽度有关 因此某些命令
  • 使用C#播放MP3文件

    我正在寻找一种无需任何第三方播放 MP3 文件的方法 媒体播放器等 有什么方法可以做到这一点吗 谢谢 我写了一个开源库 名为NAudio http naudio codeplex com可以做到这一点 private IWavePlayer
  • boost::graph 中的 DFS 更改图形内容

    最小的例子 include
  • 是否可以禁用应用程序而不隐藏它们?

    背景 最终用户可以通过操作系统内置的应用程序管理器禁用某些应用程序 该屏幕看起来像这样 在某些设备上它显示 关闭 一旦禁用应用程序 它就不会处于活动状态 并且不会以任何方式运行 直到您再次重新启用它 不过 为了重新启用它 您仍然可以在应用程
  • 即使具有 INTERNET 权限,连接到页面时仍显示“权限被拒绝”

    从 Android 连接到任何页面时 我收到此异常 06 09 12 50 42 725 WARN System err 1080 java net SocketException Permission denied 06 09 12 50
  • python的sphinx中var、cvar和ivar有什么区别?

    我正在阅读 sphinx 文档页面 讽刺的是发现关于 var ivar 和 cvar 之间差异的文档非常缺乏 我想知道是否有人可以解释内联代码中每个不同名称空间之间的区别 Example class foo object var str f
  • 替换/删除与正则表达式 (.NET) 不匹配的字符

    我有一个正则表达式来验证字符串 但现在我想删除所有与我的正则表达式不匹配的字符 E g regExpression w text This is a sample text with some invalid characters Remo
  • 为什么我的 IdentityRoles 和 ApplicationUsers 没有填充到我的数据库中?

    我在 net core 3 1 Web 应用程序中播种用户时遇到问题 正在 SQL Server 上创建相应的表 但当我运行应用程序时没有创建任何行 我不知道为什么数据库没有被填充 有人能发现这个问题吗 DBInitializer 文件将用