Первый код миграции контекста нескольких БД

  • Михаил
  • 12 мин. на прочтение
  • 128
  • 15 Nov 2022
  • 21 Nov 2022

В Entity Framework Core вы можете реализовать несколько DbContext и применить изменения к одной базе данных, используя несколько проектов. Например, вы планируете добавить схему из стороннего проекта в свой собственный проект.

Ваше требование состоит в том, чтобы добавить эту схему в вашу единую базу данных. Это может быть любая база данных; например SqlLite, SQLServer или MySQL.

В этом руководстве я буду использовать SQLServer с EntityFramework Core 2.0. Ниже представлены 3 проекта с собственным DbContext. Вы можете найти этот проект на моем GitHub здесь .

  • BookRental
  • StudentRegistration
  • MultipleDbContextExample

BookRentalпроект содержит две сущности с именами «Автор» и «Книга».
StudentRegistrationпроект содержит одну сущность под названием «Студент».
MultipleDbContextExampleПроект содержит DbContext индивидуальной аутентификации ядра ASP.NET по умолчанию, который будет иметь свои собственные объекты.

В MultipleDbContextExample, мы добавим DbContext из BookRentalи StudentRegistrationпроектов. Это добавит все объекты в одну базу данных.

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

Проект BookRental DbContext

namespace BookRental.Models
{
    public class BookRentalDbContext : DbContext
    {
        public BookRentalDbContext (DbContextOptions options)
            : base(options)
        {
        }

        public DbSet Author { get; set; }
        public DbSet Book { get; set; }
    }
}

Проект StudentRegistration DbContext

namespace StudentRegistration.Models
{
    public class StudentRegistrationDbContext : DbContext
    {
        public StudentRegistrationDbContext(DbContextOptions options)
            : base(options)
        {
        }

        public DbSet Student { get; set; }
    }
}

Проект MultipleDbContextExample DbContext

namespace MultipleDbContextExample.Data
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

Теперь у нас есть DbContext из каждого проекта. Давайте продолжим и внесем изменения в startup.csфайл в MultipleDbContextExampleпроекте, который будет поддерживать один единственный экземпляр базы данных SQL.

В ConfigureServicesDI я определил два DbContext для BookRentalDbContextи StudentRegistrationDbContext.

public void ConfigureServices(IServiceCollection services)
{
    // Default ASP.NET Authentication DbContext
    services.AddDbContext(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity()
        .AddEntityFrameworkStores()
        .AddDefaultTokenProviders();

    // BookRentalDbContext from BookRental project
    services.AddDbContext(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), o => o.MigrationsAssembly("MultipleDbContextExample"))
    );

    // StudentregistrationDbContext from StudentRegistration project
    services.AddDbContext(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), o => o.MigrationsAssembly("MultipleDbContextExample"))
    );
    // Add application services.
    services.AddTransient();

    services.AddMvc();
}

После того, как вы определили свой собственный DbContext в файле запуска, мы применим миграцию, которая создаст таблицы в базе данных. Выполните приведенные ниже команды из консоли PowerShell. Убедитесь, что вы находитесь в MultipleDbContextExampleпроекте и выполните приведенные ниже команды.

Миграция базы данных по умолчанию из MultipleDbContextExampleпроекта.

Update-Database -Context ApplicationDbContext

Добавьте миграцию из BookRentalDbContextDbContext.

Add-Migration InitialBookRentalDbMigration -Context BookRentalDbContext -o Data/Migrations/BookRental/BookRentalDB
Update-Database -Context BookRentalDbContext

Добавьте миграцию из StudentRegistrationDbContextDbContext.

Add-Migration InitialStudentRegistrationDbMigration -Context StudentRegistrationDbContext -o Data/Migrations/StudentRegistration/StudentRegistrationDB
Update-Database -Context StudentRegistrationDbContext

После того, как вы выполнили вышеуказанную команду, вы увидите таблицы, созданные в базе данных.