EF CORE:是否可以在一个数据库中支持两个模型?

时间:2018-06-29 14:49:22

标签: entity-framework entity-framework-core ef-migrations entity-framework-core-2.1

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

我想我应该以某种方式分隔dbo_EFMigrationsHistory吗? 在文档中找不到此类选项。

1 个答案:

答案 0 :(得分:2)

是的,您可以在同一数据库中拥有多个上下文。 I've put together a sample showing three contexts in the same database。您通常会声明三个上下文,并且在设置迁移时它们之间的差异就很明显。您只需要在此处更明确地命名,为要迁移或更新的上下文命名,同时也要明确迁移的方向是一个好主意。

这是上面链接的示例项目的Program.Main,它显示了三个用于依赖项注入的基本添加,然后分别对它们进行“填充”。有关其余文件,请参见Github上的回购。

    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