Подтвердить что ты не робот

Метод My Seed() никогда не вызывается в Code First EF 5

Мой метод Seed() никогда не вызывается. Он вызывается, когда я делаю Update-Database из консоли диспетчера пакетов, но никогда не запускаюсь из кода. Если я удалю свою базу данных, создаются все таблицы (поэтому выполняются мои классы миграции), но мой код Seed() никогда не вызывается. 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....
}

Конфигурация:

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
}

Что может быть неправильным?

4b9b3361

Ответ 1

Итак, причина в том, что мне нужно было указать мой пользовательский инициализатор в файле конфигурации:

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

Ответ 2

Пожалуйста, сначала обратитесь к принятому ответу.
Я просто хочу добавить очень важное замечание к этой проблеме.

Я столкнулся с ТОЧНО той же проблемой, которая описывалась этим вопросом (и это привело меня сюда). НО я использовал CreateDatabaseIfNotExists вместо MigrateDatabaseToLatestVersion, и мой метод семени не был выполнен даже после применения принятого ответа.

Моя проблема заключалась в следующем: В соответствии с документацией для метода Seed: метод Seed DbMigrationsConfiguration не будет выполняться, если Инициализатор базы данных является одним из следующих

Если вы используете один из этих типов. вы должны создать свой собственный класс, который наследуется от одного из этих типов, а затем переопределить метод семени в вашем собственном классе.

В моем случае добавление следующего класса решило проблему.

public class CreateNotifierDatabaseIfNotExists : CreateDatabaseIfNotExists<NotifierContext>
{
    protected override void Seed(NotifierContext context)
    {
        // the code of the seeding is go here
    }
}