2016-07-15 5 views
1

EF移行内でSQL()コマンドを実行しているときに、現在SQLタイムアウトが発生しています。エンティティフレームワークの移行時のSQLタイムアウト

状況: 私はバンチ(> 50)テーブルを1つのテーブルに置き換え、新しいテーブルにドロップしようとしているテーブルのデータを変換する必要があります。私は以下の方法で移行を構成しました:

1.新しいテーブルを作成します。

  1. 同じ移行で、SQL()関数を使用してデータを移行するSQLスクリプトを実行します。

3.すべての古いテーブルを削除します。

現在、移行は次のエラーを与える:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. The statement has been terminated. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out

エラーが、私は彼らにインストーラを与える環境の中で起こっている、と彼らは私なし関与それを実行するので、私は手動ですることはできません個々の移行を実行し、途中で一時停止してSQLスクリプトを実行します。

接続のタイムアウトを変更する方法はありますか、この問題を回避しますか?

環境:

EF 6.0コードファースト

SQL Server 2012の

答えて

1

あなたは、接続文字列で接続タイムアウトを設定することができるはずです、何かのように:

Connection Timeout=180; 
+0

マイグレーションのためだけにタイムアウトを変更することはできませんか?接続文字列でそれを変更すると、アプリのユーザーにも変更されます。私はそれを望んでいません。 – AXMIM

+0

"Package Manager Console"を使用しているときに接続文字列を手動で上書きできますが、自動移行にどのように使用できるかはわかりません。 – AXMIM

1

参照してください。このanswer

Use Configuration.cs file to set custom time out:

internal sealed class Configuration :

DbMigrationsConfiguration<ApplicationDbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     ContextKey = "YourDbContext"; 

     // New timeout in seconds 
     this.CommandTimeout = 60 * 5; 
    } 
} 

この方法では、移行のタイムアウトを変更するだけで、既定の接続文字列を使用するすべてのユーザーは変更できません。

関連する問題