永远不会调用我的Seed()
方法。当我从包管理器控制台执行Update-Database
时调用它,但从代码运行时从不调用它。
如果删除我的数据库,则会创建所有表(因此我的迁移类已执行),但我的Seed()代码永远不会被调用。
MVC 4,实体框架工作5代码优先。
的Global.asax:
protected void Application_Start()
{
Database.SetInitializer<MyContext>(new DbInitializer());
}
DBINIT:
internal class DbInitializer : MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>
{
}
DBContext:
public partial class MyContext : DbContext
{
public MyContext() : base("DefaultConnection")
{
}
// public DBSets....
}
配置:
internal sealed class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
// The constructor is actually called
AutomaticMigrationsEnabled = false;
}
protected override void Seed(MyContext context)
{
// My seed code, never called
}
可能出现什么问题?
答案 0 :(得分:15)
所以原因是我需要在配置文件中指定我的自定义初始化程序:
<entityFramework>
<contexts>
<context type="EFTest2.MyContext, EFTest2">
<databaseInitializer type="EFTest2.Initializers.DbInitializer, EFTest2" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
之后,调用我的Seed
方法。
答案 1 :(得分:5)
请先参考接受的答案 我只想在这个问题上添加一个非常重要的注释。
我正面临完全这个问题描述的同样问题(这引导我到这里)。但我使用 CreateDatabaseIfNotExists 而不是 MigrateDatabaseToLatestVersion ,即使应用了接受的答案,我的种子方法也没有执行。
我的问题如下:
根据{{3}}:
如果数据库初始化程序是以下之一,则不会执行Seed
的{{1}}方法
如果您使用其中一种类型,则应创建自己的类,该类继承自其中一种类型,然后覆盖您自己类中的种子方法。
在我的情况下,添加以下类解决了这个问题。
DbMigrationsConfiguration