在启用了身份验证/.NET的EF Core中将数据植入问题

彼得·服务员

我使用.net 5和React模板创建了一个ASP.NET Core Web App,并在VS向导中启用了身份验证。为dbContext创建的代码是这样的:

public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
  {
    public ApplicationDbContext(
        DbContextOptions options,
        IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
    {
    }

我想以如下方式从Program.cs调用的seedData方法中访问此dbContext:

var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
   var services = scope.ServiceProvider;
   try { SeedData.Initialize(services); } ...

当我尝试在SeedData / Initialize中获取对我的上下文的引用时,由于以下实例化DbContextOptions时构造函数的第二个参数丢失,所以我得到了一个空引用错误(null显然是错误的,但是我不知道我在做什么应该通过)

public static class SeedData
{
    public static void Initialize(IServiceProvider serviceProvider)
    {
        using ApplicationDbContext context = new ApplicationDbContext(
            serviceProvider.GetRequiredService<
                DbContextOptions<ApplicationDbContext>>(),null);
穆罕默德马赫迪塔拉奇

试试这个:

首先,您必须创建范围并从program.cs中获取需求服务(ApplicationUser继承自IdentityUser)。

 public static void Main(string[] args)
{
   var host = CreateHostBuilder(args).Build();

   using (var scope = host.Services.CreateScope())
   {
       var services = scope.ServiceProvider;

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

       ApplicationDbContextSeed.SeedDefaultUserAsync(userManager)
         .GetAwaiter().GetResult(;
   }

   host.Run();

}

接下来,您必须在播种类中创建静态播种方法,例如:

public class ApplicationDbContextSeed
{
    public static async Task SeedDefaultUserAsync(UserManager<ApplicationUser> userManager)
    {
        var user = new ApplicationUser()
        {
            Email = "email",
            UserName = "username",
        };

        await userManager.CreateAsync(user, "password");

   }
}

您也可以在此课程中播种数据库

public static async Task SeedSampleDataAsync(ApplicationDbContext context)
{
            // Seed, if necessary
            if (!context.TodoLists.Any())
            {
                context.TodoLists.Add(new TodoList
                {
                    Title = "Shopping",
                    Items =
                    {
                        new TodoItem { Title = "Apples", Done = true },
                        new TodoItem { Title = "Milk", Done = true },
                        new TodoItem { Title = "Bread", Done = true },
                        new TodoItem { Title = "Toilet paper" },
                        new TodoItem { Title = "Pasta" },
                        new TodoItem { Title = "Tissues" },
                        new TodoItem { Title = "Tuna" },
                        new TodoItem { Title = "Water" }
                    }
                });

                await context.SaveChangesAsync();
            }
}

最后在program.cs中调用此方法

 public static void Main(string[] args)
{
   var host = CreateHostBuilder(args).Build();

   using (var scope = host.Services.CreateScope())
   {
       var services = scope.ServiceProvider;

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

       ApplicationDbContextSeed.SeedDefaultUserAsync(userManager)
         .GetAwaiter().GetResult(;

       var context = services.GetRequiredService<ApplicationDbContext>();

       await ApplicationDbContextSeed.SeedSampleDataAsync(context);
   }

   host.Run();

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Asp.Net Core 2.2的运行时禁用/启用身份验证?

来自分类常见问题

.NET Core身份服务器4身份验证VS身份身份验证

来自分类Dev

.NET Core令牌身份验证-主体

来自分类Dev

.Net Core HttpClient摘要身份验证

来自分类Dev

ASP.Net身份和Google身份验证问题

来自分类Dev

使用身份验证的EF Core 3.1 =集成Active Directory

来自分类Dev

ASP.NET Core中的承载令牌身份验证

来自分类Dev

ASP.NET Core中的基本身份验证

来自分类Dev

ASP.Net Core SAML身份验证

来自分类Dev

.NET Core在AzuerAD身份验证后添加声明

来自分类Dev

.NET Core 3.1 WebApi项目+ NTLM身份验证

来自分类Dev

.NET Core API中的Windows身份验证自动登录

来自分类Dev

什么是ASP.NET Core的Microsoft身份验证方案?

来自分类Dev

.Net Core 3.1自定义身份验证

来自分类Dev

.Net Core Web API的Auth0身份验证

来自分类Dev

mvc 到 net core 2 迁移身份验证

来自分类Dev

在 .NET Core 2.0 中设置 JWT 身份验证

来自分类Dev

.Net Core 身份验证和用户会话

来自分类Dev

在 .NET Core 2.1 中将 IIS 基本身份验证传递给 SQL Server

来自分类Dev

身份验证问题

来自分类Dev

ASP.NET Core API / Angular-身份验证问题

来自分类Dev

Blazor Server .Net Core身份验证链接到其他数据库表

来自分类Dev

ASP.NET Core 3.0身份不会向我的浏览器添加任何身份验证数据

来自分类常见问题

在ASP.NET MVC中获取经过身份验证的身份用户数据

来自分类Dev

在ASP.NET MVC 5.1中更改身份/成员身份验证的默认数据库

来自分类Dev

在ASP.NET MVC中获取经过身份验证的身份用户数据

来自分类Dev

如何在ASP.NET表单身份验证中启用多次登录尝试?

来自分类Dev

Azure身份验证:仅允许启用了MFA的用户

来自分类Dev

启用了GMail 2步身份验证的pine(Alpine)?

Related 相关文章

  1. 1

    如何在Asp.Net Core 2.2的运行时禁用/启用身份验证?

  2. 2

    .NET Core身份服务器4身份验证VS身份身份验证

  3. 3

    .NET Core令牌身份验证-主体

  4. 4

    .Net Core HttpClient摘要身份验证

  5. 5

    ASP.Net身份和Google身份验证问题

  6. 6

    使用身份验证的EF Core 3.1 =集成Active Directory

  7. 7

    ASP.NET Core中的承载令牌身份验证

  8. 8

    ASP.NET Core中的基本身份验证

  9. 9

    ASP.Net Core SAML身份验证

  10. 10

    .NET Core在AzuerAD身份验证后添加声明

  11. 11

    .NET Core 3.1 WebApi项目+ NTLM身份验证

  12. 12

    .NET Core API中的Windows身份验证自动登录

  13. 13

    什么是ASP.NET Core的Microsoft身份验证方案?

  14. 14

    .Net Core 3.1自定义身份验证

  15. 15

    .Net Core Web API的Auth0身份验证

  16. 16

    mvc 到 net core 2 迁移身份验证

  17. 17

    在 .NET Core 2.0 中设置 JWT 身份验证

  18. 18

    .Net Core 身份验证和用户会话

  19. 19

    在 .NET Core 2.1 中将 IIS 基本身份验证传递给 SQL Server

  20. 20

    身份验证问题

  21. 21

    ASP.NET Core API / Angular-身份验证问题

  22. 22

    Blazor Server .Net Core身份验证链接到其他数据库表

  23. 23

    ASP.NET Core 3.0身份不会向我的浏览器添加任何身份验证数据

  24. 24

    在ASP.NET MVC中获取经过身份验证的身份用户数据

  25. 25

    在ASP.NET MVC 5.1中更改身份/成员身份验证的默认数据库

  26. 26

    在ASP.NET MVC中获取经过身份验证的身份用户数据

  27. 27

    如何在ASP.NET表单身份验证中启用多次登录尝试?

  28. 28

    Azure身份验证:仅允许启用了MFA的用户

  29. 29

    启用了GMail 2步身份验证的pine(Alpine)?

热门标签

归档