entity-framework - EF CORE:是否可以在一个数据库中支持两种模型?
问题描述
是否可以在一个数据库中支持具有所有“迁移功能”的两种不同的 EF Core 模型?
我想我应该以某种方式分开dbo
。_EFMigrationsHistory
? 在文档中找不到这样的选项。
解决方案
是的,您可以在同一个数据库中拥有多个上下文。 我已经整理了一个示例,显示了同一数据库中的三个上下文。你像往常一样声明三个上下文,当你设置迁移时,差异就会显现出来;您只需要在此处更加明确,命名您正在迁移或更新的上下文,并且明确说明迁移的去向是一个好主意。
这是上面链接的示例项目的 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