Update-Database不使用自定义初始化程序

时间:2015-05-07 15:07:55

标签: c# entity-framework code-first

请不要将this SO问题视为重复:

我为代码第一实体框架提供了以下自定义数据库初始化程序配置:

<entityFramework>
  <contexts>
    <context type="MyApp.Context, MyApp">
      <databaseInitializer type="MyApp.CustomInitializer, MyApp" />
    </context>
  </contexts>
</entityFramework>

当我运行应用程序时,一切都很顺利,InitializeDatabase(Context context)方法按预期调用。

但是,在程序包管理器控制台中运行命令Update-Database时,它没有使用我的自定义初始化程序。

为什么在运行应用程序时却无法从包管理器控制台运行?它将使用哪个初始化程序?

2 个答案:

答案 0 :(得分:0)

如果调用Update-Database而未指定ConfigurationType的位置,则假定它位于同一个程序集中。一个例子:

Update-Database -ProjectName MyApp.Migrations -ConfigurationTypeName "MyApp.Migrations.MyMigrationConfiguration" -ConnectionString "Data Source=.\SQLEXPRESS;Database=myAppDb;Trusted_Connection=False;User ID=xx;Password=xxxxxx" -ConnectionProviderName "System.Data.SqlClient"

答案 1 :(得分:0)

不幸的是,Update-Database根本不使用数据库初始化程序。它创建一个DbMigrator来处理更新(这也是MigrateDatabaseToLatestVersion初始化程序使用的),并尝试查找DbMigrationsConfiguration类或使用您在命令行上提供的类。

如果您需要在迁移后进行一些维护,可以在迁移本身中使用Up()功能。或者我认为您的类中的Seed()函数可以覆盖DbMigrationsConfiguration(但默认情况下,Seed()会运行every数据库初始化...但是,{{3}解决这个问题。)

如果你想在工作中看到它:there are ways