ef-code-first アプリケーションを code-first-migrations モデルに移行し、データベース初期化子を からDropCreateDatabaseIfModelChanges
に切り替えていますMigrateDatabaseToLatestVersion
。
元の初期化子では、いくつかのユーザー定義関数などを作成し、データベース構成を変更していました (例: SET AUTO_CLOSE OFF
)。EF ではサポートされていないため、SQL を DB に対して直接実行することで、これらすべてを実現しました。
移行モデルに移ったので、生成されたクラスのUp
メソッドにコードを追加することで、ほとんど同じことをしようとしています。DbMigration
このコードは、Sql
メソッドを使用して SQL を挿入します。
ただし、結果として次のようなさまざまなエラーが発生します。
ユーザー定義関数を作成するための SQL により、
CREATE FUNCTION
ステートメントがバッチの開始時にある必要があるというエラーが発生します。ステートメント
ALTER DATABASE
を実行すると、ユーザー トランザクション内では使用できないというエラーが発生します。(私はトランザクションを作成しませんが、おそらく既に開始されているトランザクションがあります)。
どうすればこれを克服できますか?派生クラスでは、DbMigration
DbContext にアクセスできないようで、データベースに直接アクセスできません。