1

我希望有人能对这个问题有所了解,因为到目前为止它有点神秘,而且我在四处寻找后无法找到答案。

我们有一个应用程序,我们首先使用 EF 代码对现有数据库进行数据库迁移。我们的应用程序使用 2 个数据库,我们有 2 个 DAL,每个 DAL 都有一个单独的 DbContext 用于访问其各自的数据库。为简单起见,我们的解决方案如下所示:

解决方案

  • DataAccessLayerA --> 数据库A
  • DataAccessLayerB --> 数据库B

我们看到的问题是,在 DataAccessLayerA 上,我们的 MigrateDatabaseToLatestVersion 初始化程序运行良好,并且我们的 DatabaseA 被迁移。但是,在 DataAccessLayerB 上,MigrateDatabaseToLatestVersion 初始化程序绝对不执行任何操作,并且我们的 DatabaseB 不会被迁移。

这是我们在 DataAccessLayerA 上执行的代码:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<ContextA,     DALA.Migrations.Configuration>());

这是我们在 DataAccessLayerB 上执行的代码:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<ContextB, DALB.Migrations.Configuration>());

当我逐步执行代码时,两行代码都在执行,每行代码都发生在自己的单独模块中(使用 PRISM 的 WPF 应用程序)。

现在,DataAccessLayerB 的数据库迁移工作的唯一方法是我们显式使用 DbMigrator 类并调用 Update() 方法。这确实会将数据库迁移到最新版本,尽管它会在数据库中的系统表之外创建 __MigrationHistory 表。

我们正在使用实体框架 5.0,并且我们有 AutomaticMigrationsEnabled = false,因为我们希望使用基于代码的迁移来获得更多粒度和控制。

我可以忍受将 DbMigrator 类用于第二个,但我真的很想了解它为什么不起作用。我已经多次看过 Julie Lerman 的教程并在线阅读了关于代码优先迁移的文档,但仍然无法找到答案。

任何有关可能出错的信息将不胜感激。

4

0 回答 0