Search code examples
entity-frameworkef-code-firstcode-first

My Seed() method is never called in Code First EF 5


My Seed() method is never called. It is called when I do an Update-Database from the Package Manager Console, but never when I run from code. If I delete my database, all tables are created ( so my migration classes are executed), but my Seed() code is never called. MVC 4, Entity Frame Work 5 Code First.

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....
}

Configuration:

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
}

What could be wrong?


Solution

  • So the reason was that I needed to specify my custom Initializer in the config file:

      <entityFramework>
          <contexts>
            <context type="EFTest2.MyContext, EFTest2">
              <databaseInitializer type="EFTest2.Initializers.DbInitializer, EFTest2" />
            </context>
          </contexts>
          <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
      </entityFramework>
    

    After that, my Seed method is called.