请不要将this SO问题视为重复:
我为代码第一实体框架提供了以下自定义数据库初始化程序配置:
<entityFramework>
<contexts>
<context type="MyApp.Context, MyApp">
<databaseInitializer type="MyApp.CustomInitializer, MyApp" />
</context>
</contexts>
</entityFramework>
当我运行应用程序时,一切都很顺利,InitializeDatabase(Context context)
方法按预期调用。
但是,在程序包管理器控制台中运行命令Update-Database
时,它没有使用我的自定义初始化程序。
为什么在运行应用程序时却无法从包管理器控制台运行?它将使用哪个初始化程序?
答案 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