14

私の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>
{
}

DB コンテキスト:

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
}

何が間違っている可能性がありますか?

4

3 に答える 3

16

その理由は、構成ファイルでカスタム初期化子を指定する必要があったためです。

  <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メソッドが呼び出されます。

于 2013-02-03T15:22:17.513 に答える
6

最初に受け入れられた回答を参照してください。
この問題に非常に重要な注意を追加したいだけです。

私はこの質問で説明したのとまったく同じ問題に直面していました(そしてこれが私をここに導きました)。しかし、 MigrateDatabaseToLatestVersionの代わりにCreateDatabaseIfNotExistsを使用していたため、受け入れられた回答を適用した後でもシード メソッドが実行されませんでした。

私の問題は次のとおりでした:シードメソッドのドキュメントによると:データベース初期化子が次のいずれかである場合、SeedメソッドはDbMigrationsConfiguration実行されません

これらの型のいずれかを使用している場合は、それらの型のいずれかを継承する独自のクラスを作成し、独自のクラスでシード メソッドをオーバーライドする必要があります。

私の場合、次のクラスを追加すると問題が解決しました。

public class CreateNotifierDatabaseIfNotExists : CreateDatabaseIfNotExists<NotifierContext>
{
    protected override void Seed(NotifierContext context)
    {
        // the code of the seeding is go here
    }
}
于 2015-11-23T07:57:35.340 に答える