Я пытаюсь заполнить пользователей и роли пользователей в asp.net, но только роли успешно - PullRequest
0 голосов
/ 11 июня 2018

Эй, это, вероятно, вопрос новичка, но я, честно говоря, не могу найти проблему после нескольких часов поиска ответов.

Я пытаюсь создать две роли и пользователя-администратора, заполнив базу данных.Я не получаю ошибок компиляции, но после запуска приложения я не могу войти, поэтому я проверил базу данных и заметил, что роли были созданы успешно, но не администратор.

Вот класс, который я использую для заполнения:

 public class Initialize
 {
    public static async Task InitializeAsync(ApplicationDbContext context, IServiceProvider serviceProvider)
    {
        var RoleManager = serviceProvider.GetRequiredService < RoleManager<IdentityRole>>();
        UserManager<ApplicationUser> userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        string[] rolenames = { "Admin","Member"};
        IdentityResult roleResult;

        foreach (var roleName in rolenames) {
            var roleExist = await RoleManager.RoleExistsAsync(roleName);
            if (!roleExist)
            {
                roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
            }
        }


        string username = "admin";
        string email = "admin@example.com";
        string password = "Secret123";
        string role = "Admin";

        if (await userManager.FindByEmailAsync(username) == null)
        {

            ApplicationUser user = new ApplicationUser
            {
                UserName = username,
                Email = email
            };

            IdentityResult result = await userManager
                .CreateAsync(user, password);
            if (result.Succeeded)
            {
                await userManager.AddToRoleAsync(user, role);
            }

        }
    }
}

Мои ConfigureServices:

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

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

        // Add application services.
        services.AddTransient<IEmailSender, EmailSender>();

        services.AddMvc();
    }

А вот и моя Program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        var host = BuildWebHost(args);
        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            try
            {
                var context = services.GetRequiredService<ApplicationDbContext>();
                Initialize.InitializeAsync(context, services).Wait();
            }
            catch(Exception ex)
            {
                var logger = services.GetRequiredService<ILogger<Program>>();
                logger.LogError(ex, "Error seeding");
            }
        }


        host.Run();
    }

Любая помощь приветствуется:)

1 Ответ

0 голосов
/ 29 сентября 2018

Попробуйте взглянуть на userManager -> Store -> Users -> Views Results -> Message после доступа через serviceProvider.GetRequiredService .Здесь может появиться сообщение об ошибке.

Если оно содержит сообщение:

"Невозможно создать DbSet для 'ApplicationUser', поскольку этот тип не включен в модель дляконтекст. "

Вы должны изменить ApplicationContext наследование класса от IdentityDbContext , и оно должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...