为了账号安全,请及时绑定邮箱和手机立即绑定

在单个数据库上使用多个 DbContext 进行 EF Core 迁移

在单个数据库上使用多个 DbContext 进行 EF Core 迁移

C#
千巷猫影 2021-07-02 10:17:16
我在尝试使用 EF Core 在 ASP.NET Core 解决方案中使用迁移时遇到问题,其中有多个DbContext共享相同的 SQL 数据库。在我的应用程序启动方法中,我获得了对每个上下文的引用并调用了该context.Database.Migrate()方法。但是,由于这两个上下文都指向同一个底层数据库,因此出现错误:数据库中已经有一个名为“__EFMigrationsHistory”的对象。这是一个 MCVE:class DbContextA : DbContext {}class DbContextB : DbContext {}static void Main(string[] args){  var contextA = GetContextFromDIContainer<DbContextA>();  var contextB = GetContextFromDIContainer<DbContextB>();  contextA.Database.Migrate();  contextB.Database.Migrate();}void ConfigureServices(IServiceCollection services){  services.AddDbContext<DbContextA>(opt =>  {    opt.UseSqlServer("connectionstring");  });  services.AddDbContext<DbContextB>(opt =>  {    opt.UseSqlServer("connectionstring");  });}请注意,每个都DbContext存在于配置了迁移的单独程序集中。我可以使用Update-DatabaseCLI 工具手动执行相应的迁移,但它似乎不能作为我的应用程序启动代码的一部分。有没有办法在运行时在两个上下文上执行迁移并绕过__EFMigrationsHistory表创建(如果已经存在)?
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我认为您的问题只是两个 Context 尝试使用相同的迁移历史记录表


尝试为每个特定的迁移历史表


protected override void OnConfiguring(DbContextOptionsBuilder options)

=> options.UseSqlServer(

    connectionString,

    x => x.MigrationsHistoryTable("__MyMigrationsHistoryForDBContextA", "mySchema"));


查看完整回答
反对 回复 2021-07-03
  • 1 回答
  • 0 关注
  • 331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信