代码之家  ›  专栏  ›  技术社区  ›  Roman Pokrovskij Archil Labadze

英孚核心:是否可以在一个数据库中支持两个模型?

  •  2
  • Roman Pokrovskij Archil Labadze  · 技术社区  · 7 年前

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

    我想我应该分开 dbo 是的。 _EFMigrationsHistory 是吗? 在文档中找不到这样的选项。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Kevin Fichter    7 年前

    是的,在同一个数据库中可以有多个上下文。 I've put together a sample showing three contexts in the same database 是的。您可以像通常那样声明三个上下文,并且在设置迁移时它们之间的差异会显现出来;您只需要在这里更加明确,命名您正在迁移或更新的上下文,而且还应该明确迁移的方向。

    这是上面链接的示例项目的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