.NET Core 2.2 - пользователи Seed Admin - PullRequest
0 голосов
/ 10 апреля 2019

У меня проблема с моим приложением .NET Core 2.2.Я добавил аутентификацию и сущность пользователя в свое приложение, и теперь мое приложение выдает исключения при запуске.Когда я пытаюсь добавить миграции, выдается другое исключение.

Когда я пытаюсь добавить начальную миграцию:

Невозможно добавить начальный объект для типа объекта AppUser, так какзначение, предоставленное для свойства 'Id', не относится к типу 'int'.Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть значения соответствующих свойств.

Когда я пытаюсь запустить мое приложение:

Начальный объект для типа сущности AppUserне может быть добавлено, потому что значение '95ee39c2-a865-4272-8b67-da590fb4b80c', предоставленное для свойства 'Id', не относится к типу 'int'.

Я не знаю, что я сделалнеправильно.Я пытался изменить то и это в течение пары часов, но безуспешно.

Startup.cs - Метод ConfigureServices

    services.AddDbContext<ResumeContext>(options => 
        options
            .UseSqlServer(Configuration.GetConnectionString("ResumeConnection"))
            .EnableSensitiveDataLogging()
        );

    var builder = services.AddIdentityCore<AppUser>(o =>
    {
        o.Password.RequireDigit = false;
        o.Password.RequireLowercase = false;
        o.Password.RequireUppercase = false;
        o.Password.RequireNonAlphanumeric = false;
        o.Password.RequiredUniqueChars = 0;
        o.Password.RequiredLength = 6;
    });

    builder = new IdentityBuilder(builder.UserType, typeof(AppRole), builder.Services);
    builder.AddEntityFrameworkStores<ResumeContext>().AddDefaultTokenProviders();

SeedData.cs

public static class SeedData
{
    public static IWebHost SeedAdminUser(this IWebHost webHost)
    {
        using (var scope = webHost.Services.CreateScope())
        {
            var userManager = scope.ServiceProvider.GetRequiredService<UserManager<AppUser>>();
            var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<AppRole>>();

            if (userManager.Users.Any(u => u.Email == "admin@domain.com")) return webHost;

            roleManager.CreateAsync(new AppRole { Name = AppRole.Admin }).Wait();

            userManager.CreateAsync(new AppUser { UserName = "Admin", Email = "admin@domain.com" }, "CCZtE2XpqXbSs5B").Wait();

            userManager.AddToRoleAsync(userManager.FindByEmailAsync("admin@domain.com").Result, AppRole.Admin).Wait();
        }

        return webHost;
    }
}

AppUser.cs

public class AppUser : IdentityUser<int>
{
    // TODO: This will be extended in future
}

User.cs

public class User
{
    public int Id { get; set; }

    public int AppUserId { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Email { get; set; }

    public string Phone { get; set; }

    public string PostalCode { get; set; } 

    public DateTime CreationDate { get; set; }

    public DateTime? ModifyDate { get; set; }

    public long? FacebookId { get; set; }

    public AppUser AppUser { get; set; }
}

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args)
            .Build()
            .SeedAdminUser()
            .Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Context.cs

public class ResumeContext : IdentityDbContext<AppUser, AppRole, int>
{
    public ResumeContext(DbContextOptions options) : base(options) { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Configure("Resume.Infrastructure.Data");
    }
}

Кто-нибудь знает, что я делаю неправильно?А как правильно настроить тождественность и начальный админ пользователя?

1 Ответ

1 голос
/ 10 апреля 2019

Убедитесь, что ваш ResumeContext унаследован от IdentityDbContext, который использует IdentityUser<int>.

Вы можете найти пример того, как настроить пользовательский IdentityDbContext с int на основе IDs здесь: Ваш контекст БД на основе идентификаторов должен выглядеть следующим образом

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