首页 > 解决方案 > EF CORE:是否可以在一个数据库中支持两种模型?

问题描述

是否可以在一个数据库中支持具有所有“迁移功能”的两种不同的 EF Core 模型?

我想我应该以某种方式分开dbo_EFMigrationsHistory? 在文档中找不到这样的选项。

标签: entity-frameworkentity-framework-coreentity-framework-migrationsentity-framework-core-2.1

解决方案


是的,您可以在同一个数据库中拥有多个上下文。 我已经整理了一个示例,显示了同一数据库中的三个上下文。你像往常一样声明三个上下文,当你设置迁移时,差异就会显现出来;您只需要在此处更加明确,命名您正在迁移或更新的上下文,并且明确说明迁移的去向是一个好主意。

这是上面链接的示例项目的 Program.Main,显示了为依赖注入添加了三个基本上下文,然后对每个上下文进行“填充”。其余文件请参见 Github 上的 repo。

    class Program
{
    static async Task Main(string[] args)
    {
        var providers = new ServiceCollection()
            .AddDbContext<AnimalContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
            .AddDbContext<DoctorContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
            .AddDbContext<CarContext>(options => options.UseSqlServer(Globals.CONNECTIONSTRING))
            .BuildServiceProvider();

        var animalContext = providers.GetService<AnimalContext>();
        await AnimalHelpers.Seed(animalContext);
        await AnimalHelpers.Read(animalContext);

        var carContext = providers.GetService<CarContext>();
        await CarHelpers.Seed(carContext);
        await CarHelpers.Read(carContext);

        var doctorContext = providers.GetService<DoctorContext>();
        await DoctorHelpers.Seed(doctorContext);
        await DoctorHelpers.Read(doctorContext);

        Console.ReadKey();

    }
}

为了初始化数据库,我为每个上下文运行迁移,然后为每个上下文运行更新数据库,如下所示(在 powershell 中;PMC 命令/标志略有不同):

移民:

dotnet ef migrations add CreateAnimalsSchema --context AnimalContext -o Data/Migrations/Animals

数据库更新:

dotnet ef database update --context AnimalContext


推荐阅读