TLDR; エンティティ フレームワーク 5 のコード化された移行を使用して全文インデックスを追加する方法
エンティティ フレームワークの移行を使用してデータベースに全文索引を追加する際に問題が発生しています。最初からそこにある必要があるので、自動的に生成された InitialCreate マイグレーションを変更して追加しようとしています。
DbMigrations API を介してそれを行う方法がないため、'Up' コードの最後でインライン SQL を実行することにしました。
Sql("create fulltext catalog AppNameCatalog;");
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;");
これを実行すると、このSQLに到達するまですべてが正常に作成され、SQLエラー ' CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction. がスローされます。'。これは予想どおりであり、設計どおりに機能します。
ありがたいことに、Sql() には、移行トランザクションの外部で SQL を実行できるオーバーロードがあります。素晴らしい!と思いました。
Sql("create fulltext catalog AppNameCatalog;", true);
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;", true);
しかし、これを行うためにコードを変更すると (上記を参照)、新しいタイムアウト エラー 'タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。'
私はSQLを吐き出して手動で実行しようとしましたが、うまくいきました。また、生成されたSQLをトランザクションの外部で実行する場合と実行しない場合で比較しましたが、それらは同一であるため、SQLが実行される方法にあるに違いありません。
助けてくれてありがとう!