Asp.Net Core EF:初始化数据库时如何添加Admin

时间:2018-05-17 09:09:35

标签: c# asp.net-core entity-framework-core

如何在创建此数据库或使用DBMS添加时将Admin添加到数据库?我不知道哪种方法更正确。

如果我在初始化数据库时添加代码,我应该在DbContext中执行此操作?

2 个答案:

答案 0 :(得分:2)

您没有提供有关您情况的大量信息,因此我将以一般性的方式回答。

如果您只有一位管理员,那么您可能希望将其凭据设置为位于应用配置中。您也可以将其存储在数据库中。如果您的应用可以拥有多个管理员并且其凭据可能已更改,则您需要将它们存储到数据库中。一种非常常见的方法是使用一个表来存储可能的用户角色,其中包括admin的记录,而users表应该有一个到role表的外键。

最好单独开发一个安装程序应用程序,以确保要使用的应用程序可以在任何环境中使用。应该执行此应用程序,并且应该在使用应用程序之前运行所需的所有脚本和程序代码。

您需要一些脚本来创建数据库及其中的表以及您可能需要的一些记录,但管理员的凭据最好通过程序代码中的安装程序来定义,管理员将在其中输入他或她的用户名和程序代码会将其写入应用程序配置,如果这是您选择的方法,或将其插入数据库。如果您有一个将创建管理员的脚本,那么它是不安全的,因为所有管理员最初都会使用相同的密码,这是一个很高的安全风险。

答案 1 :(得分:1)

没有正确的方法。你可以这样做:

  1. 使用SQL脚本 - 仅在运行脚本时运行
  2. 使用EF Data Seeding API - 仅在应用迁移时运行
  3. main() - 每次运行应用程序时运行
  4. 您可以在Main()中执行以下操作:

    public static async Task Main(string[] args)
    {
        // Build the application host
        var host = BuildWebHost(args);
    
        using(var scope = host.Services.CreateScope())
        {
            // Resolve the UserManager using the created scope 
            var usermanager = scope.ServiceProvider.GetService<UserManager<ApplicationUser>>();
    
            // TODO: Add default users if they don't already exist
        }
    
        // Run the application
        host.Run();
    }