. Net Core 3.1 Добавление идентификатора в существующий проект с MySql - PullRequest
0 голосов
/ 26 марта 2020

Я использую ASP. NET Core 3.1 с MySql базой данных и Entity Framework Core. Мне нужно добавить личность в этот проект.

Я добавил эти пакеты:

  • Pomelo.EntityFrameworkCore. MySql
  • Microsoft.EntityFrameworkCore
  • Microsoft.AspNetCore.Identity
  • Microsoft.AspNetCore.Identity.UI
  • Microsoft.AspNetCore.Identity.EntityFrameworkCore

Я создал ApplicationDbContext:

 public class ApplicationDbContext : IdentityDbContext
 {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
 }

И добавьте следующий код в файл Startup в методе ConfigurateServices:

        services.AddDbContext<ApplicationDbContext>(options =>  
            options.UseMySql(  
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)  
            .AddEntityFrameworkStores<ApplicationDbContext>();

Также я добавил DefaultConnection к appsetings.json.

Последний шаг в все учебные пособия - воссоздание миграций, и здесь я получил ошибку.

В сборке «Web» не найден тип конфигурации миграции. (В Visual Studio вы можете использовать команду Enable-Migrations из консоли диспетчера пакетов, чтобы добавить конфигурацию миграции.)

И если я запускаю «Enable-Migrations», я получаю

В сборке 'Web' не найден тип контекста

Как запустить миграцию и обновить базу данных?

1 Ответ

1 голос
/ 26 марта 2020

Создайте свою пользовательскую модель (ApplicationUser), затем присуще IdentityUser

добавьте свою вновь созданную пользовательскую модель в качестве аргумента генерации в IdentityDbcontext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
 {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
        }
 }


services.AddIdentity<ApplicationUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)  
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

Ваша пользовательская модель должна выглядеть следующим образом.

public class ApplicationUser : IdentityUser
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string State { get; set; }
        public string City { get; set; }
        public string Website { get; set; }
        public bool IsActive { get; set; }
        public string PhotoUrl { get; set; }
    }

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

Примечание. Если в вашем проекте есть несколько DbContext, вам нужно указать DbContext для использования при создании. миграция

например, здесь у меня есть два разных DbContext

dotnet ef migrations add {migration-name} -c TenantDbContext -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj to run the migration against a client.


dotnet ef database update -c GlobalDbContext -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj to run migration against the global context

dotnet ef migrations add {tenant-migration-name} -o Migrations/Tenants -c TenantDbContext -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj

dotnet ef database update -c GlobalDbContext -s ../AspNetCorePropertyPro.Api/AspNetCorePropertyPro.Api.csproj to run migration against the global context

-o = output directory.

-c = dbcontext to perform the migration if more than one exists.

-s = the path to the startup project.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...