を作成するC#Entity FrameworkのタイムアウトがEF 6.0VS 2015のDataTable
私は恐ろしい仕事を自動化しようとしています:各シートは、別のクエリの結果である複数シートのExcelブックを作成します。まず、自分のソリューションを動かさずにこれを行う既存の自動方法がある場合は、私に知らせてください。それ以外の場合:
私は、私は次の操作を行い、それぞれのクエリ文字列のため、その後毎のシートのクエリのコレクションを構築:私はかなりだExecution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding
:
...
"query" passed in as string above
...
DataTable dt;
using (var db = new MyDbEntities()) {
db.Database.CommandTimeout = 180;
try {
dt = db.DataTable(query);
} catch (Exception e) {
throw new Exception("Datatable creation failed: " + e.Message);
}
}
...
create spreadsheet-sheet
...
私は例外を引き起こすもののクエリを持っています180秒のタイムアウトが切れる前にタイムアウトを取得していることを確認してください。私の時計でそれを計時すると、DataTables
コールはCommandTimeout
を無視しているようです。約30秒後にタイムアウトしたようです。問題のクエリが要求された
EDIT
。それは次のとおりです。それは継承されました。それは醜いです。それは遅いブタです。これは、リモートのリンクされたOracle DBと2つの "ローカル" DBからクエリを実行しています。 SSMS
から実行すると、完了するまでに数分かかりますが、完了します。
SELECT
UPPER(LOCAL_CONSUMER_TABLE.machine) AS machine,
UPPER(LOCAL_CONSUMER_TABLE.personId) AS personId,
Persons.LastName AS lastName,
Persons.FirstName AS firstName
FROM
(
SELECT
GROUP_USER_ACCOUNT.UAC_ITU__ID
FROM
ORACLE_LINKED_SERVER..CONSUMER_TABLE.GROUP_USER_ACCOUNT AS GROUP_USER_ACCOUNT
WHERE GROUP_USER_ACCOUNT.UAC_ITU__ID IN
(
SELECT
GROUP_USERVIEW.ITU_ITU__ID
FROM
LOCAL_CONSUMER_TABLE.dbo.LoginInfoFinal AS LOCAL_CONSUMER_TABLE
INNER JOIN ORACLE_LINKED_SERVER..CONSUMER_TABLE.ITG_USER AS GROUP_USERVIEW
ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(GROUP_USERVIEW.ITU_personId)
)
AND GROUP_USER_ACCOUNT.UAC_DATE_REVOKED IS NULL
GROUP BY
GROUP_USER_ACCOUNT.UAC_ITU__ID
HAVING COUNT(GROUP_USER_ACCOUNT.UAC_ITU__ID) > 1
) AS USER_ACCOUNT
INNER JOIN ORACLE_LINKED_SERVER..CONSUMER_TABLE.ITG_USER AS GROUP_USERVIEW
ON USER_ACCOUNT.UAC_ITU__ID = GROUP_USERVIEW.ITU_ITU__ID
INNER JOIN LOCAL_CONSUMER_TABLE.dbo.LoginInfoFinal AS LOCAL_CONSUMER_TABLE
ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(GROUP_USERVIEW.ITU_personId)
INNER JOIN FACILITY.Personnel.Persons AS Persons
ON UPPER(LOCAL_CONSUMER_TABLE.personId) = UPPER(Persons.personId);
例外を発生させる*クエリ*を表示できますか? –
CommandTimeoutの設定はどこですか? [これは同じ問題ですか?](https://stackoverflow.com/questions/6232633/entity-framework-timeouts) – musefan
クエリを追加するように編集しました。また、タイムアウトは上記の「使用」の直後に設定されます。 –