.Net Core 3.1 Добавление идентификатора в существующий проект с MySql

Я использую 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 ответ


Создайте свою пользовательскую модель (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.

Есть идеи?

10000