1

ef-code-first アプリケーションを code-first-migrations モデルに移行し、データベース初期化子を からDropCreateDatabaseIfModelChangesに切り替えていますMigrateDatabaseToLatestVersion

元の初期化子では、いくつかのユーザー定義関数などを作成し、データベース構成を変更していました (例: SET AUTO_CLOSE OFF)。EF ではサポートされていないため、SQL を DB に対して直接実行することで、これらすべてを実現しました。

移行モデルに移ったので、生成されたクラスのUpメソッドにコードを追加することで、ほとんど同じことをしようとしています。DbMigrationこのコードは、Sqlメソッドを使用して SQL を挿入します。

ただし、結果として次のようなさまざまなエラーが発生します。

  • ユーザー定義関数を作成するための SQL により、CREATE FUNCTIONステートメントがバッチの開始時にある必要があるというエラーが発生します。

  • ステートメントALTER DATABASEを実行すると、ユーザー トランザクション内では使用できないというエラーが発生します。(私はトランザクションを作成しませんが、おそらく既に開始されているトランザクションがあります)。

どうすればこれを克服できますか?派生クラスでは、DbMigrationDbContext にアクセスできないようで、データベースに直接アクセスできません。

4

1 に答える 1

1

Seed派生メソッドのオーバーライドを試みることができますDbMigrationConfiguration(これは、カスタム データベース初期化子の元の Seed メソッドの最も近い代替手段です)。ただし、データベースが移行されるたびにこのメソッドが実行されることに注意してください。存在しません。

于 2012-10-31T08:31:29.650 に答える