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

Entity framework EF CORE:是否可以在一个数据库中支持两个模型?,entity-framework,entity-framework-core,entity-framework-migrations,entity-framework-core-2.1,Entity Framework,Entity Framework Core,Entity Framework Migrations,Entity Framework Core 2.1,是否可以在一个数据库中支持两种不同的EF核心模型,并具有所有“迁移功能” 我想我应该以某种方式分离dbo\u EFMigrationsHistory? 在文档中找不到此类选项。是的,同一数据库中可以有多个上下文。您通常会声明三个上下文,并且在设置迁移时差异会显现出来;在这里,您只需要更加明确,命名您正在迁移或更新的上下文,并且明确迁移的方向也是一个好主意 这是程序。上面链接的示例项目的主要部分,显示了为依赖注入添加的三个基本上下文,然后对每个上下文进行“填充”。其余文件请参见Github上的re

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

我想我应该以某种方式分离
dbo
\u EFMigrationsHistory

在文档中找不到此类选项。

是的,同一数据库中可以有多个上下文。您通常会声明三个上下文,并且在设置迁移时差异会显现出来;在这里,您只需要更加明确,命名您正在迁移或更新的上下文,并且明确迁移的方向也是一个好主意

这是程序。上面链接的示例项目的主要部分,显示了为依赖注入添加的三个基本上下文,然后对每个上下文进行“填充”。其余文件请参见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();

    }
}
类程序
{
静态异步任务主(字符串[]args)
{
var providers=newservicecolection()
.AddDbContext(options=>options.UseSqlServer(Globals.CONNECTIONSTRING))
.AddDbContext(options=>options.UseSqlServer(Globals.CONNECTIONSTRING))
.AddDbContext(options=>options.UseSqlServer(Globals.CONNECTIONSTRING))
.BuildServiceProvider();
var animalContext=providers.GetService();
等待动物助手。种子(animalContext);
等待动物助手。阅读(animalContext);
var carContext=providers.GetService();
等待CarHelpers.Seed(carContext);
等待CarHelpers.阅读(carContext);
var doctorContext=providers.GetService();
等待DoctorHelpers.Seed(doctorContext);
等待医生助手。阅读(医生上下文);
Console.ReadKey();
}
}
为了初始化数据库,我对每个上下文运行了迁移,然后对每个上下文运行了更新数据库,如下所示(在powershell中,PMC命令/标志略有不同):

迁移:
dotnet ef migrations add createanimalschema--context AnimalContext-o Data/migrations/Animals

数据库更新:
dotnet ef数据库更新——context AnimalContext

我没有一个详细的例子,但一个例子是repo(CombinedAspIdentity项目)。该项目使用三个上下文,以及三组迁移。可以对每个上下文(从cli,而不是pmc)这样指定迁移:
dotnet ef迁移添加InitialIdentityServerConfigurationDbMigration--context ConfigurationDbContext-o Data/migrations/IdentityServer/ConfigurationDb
谢谢。乍一看。。我不明白它是怎么工作的。为什么客户端配置文件不包含连接字符串?也许你知道在哪里可以找到他们?从中可以清楚地看出它们使用了多少数据库(因为不明显的是,只有一个数据库是相同的),只有一个连接字符串(同一个数据库中有三个上下文)。连接字符串位于AppSettings.json一些相关文档链接中:@K_foxer9:以下是appsetting.json:。没关系,我要试试。“一如既往”。但我仍然不明白dbo会发生什么。如果迁移历史。。。如果只包含MigrationId和version number列,它如何注册multipleContext…修复了migration命令中的错误“#”。关于MigrationHistory,初始化它们之后,只要每次指定上下文,新的迁移就会自动放置在适当的文件夹中。就数据库而言,我不明白它为什么会关心EF上下文;它只是按id跟踪迁移,EF core跟踪哪个迁移与哪个上下文相关。对于示例项目,其dbo_u迁移历史记录有三个条目:
20180630184548_CreateDoctorSchema
20180630184557_CreateAnimalsSchema
20180630184610_CreateCarsSchema