簡體   English   中英

C#實體框架超時創建數據表

[英]C# Entity Framework timeout creating DataTable

VS 2015 EF 6.0

我正在嘗試自動化一項艱巨的工作:創建一個多工作表的excel工作簿,其中每個工作表都是不同查詢的結果。 首先,如果有一個現有的自動方法無需滾動我自己的解決方案,請告訴我。 除此以外:

我建立了每頁查詢的集合,然后針對每個查詢字符串執行以下操作:

    ...
    "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
    ...

我有一個查詢導致異常: Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding

我很確定我會在180秒超時到期之前獲得超時方式。 用我的手表對其進行計時表明DataTables調用忽略了CommandTimeout 大約30秒后似乎超時了。

編輯

請求了有關查詢。 它跟隨。 它是繼承的。 這很丑。 這是一頭慢豬。 它是從遠程鏈接的Oracle數據庫和幾個“本地”數據庫中查詢的。 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);

正如克里斯所說,這是連接超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM