首頁 >後端開發 >C++ >為什麼Entity Framework投擲'已經有一個與此命令相關聯的開放數據標準器,必須首先關閉”?

為什麼Entity Framework投擲'已經有一個與此命令相關聯的開放數據標準器,必須首先關閉”?

DDD
DDD原創
2025-01-29 21:56:09382瀏覽

Why Does Entity Framework Throw

> 實體框架的“打開dataReader”錯誤:一個常見的陷阱

>

現代實體框架簡化了數據庫的交互,但是“已經有一個與此命令關聯的開放數據標準器,必須首先關閉”仍然是一個頻繁的頭痛。 本文解釋了根本原因並提供了解決方案。

考慮以下方案:查詢檢索帳戶數據,然後執行進一步的處理:>

如下所示,

<code class="language-csharp">var accounts = from account in context.Accounts
               from guranteer in account.Gurantors
               select new AccountsReport
               {
                   CreditRegistryId = account.CreditRegistryId,
                   AccountNumber = account.AccountNo,
                   DateOpened = account.DateOpened,
               };

return accounts.AsEnumerable()
                .Select((account, index) => new AccountsReport()
                    {
                        RecordNumber = FormattedRowNumber(account, index + 1),
                        CreditRegistryId = account.CreditRegistryId,
                        DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),
                        AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)
                    })
                .OrderBy(c=>c.FormattedRecordNumber)
                .ThenByDescending(c => c.StateChangeDate);</code>
方法添加了另一個數據庫查詢:

DateLastUpdated問題? 主查詢打開A

<code class="language-csharp">public DateTime DateLastUpdated(long creditorRegistryId, string accountNo)
{
    return (from h in context.AccountHistory
            where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo
            select h.LastUpdated).Max();
}</code>
打開另一個

,而不會關閉第一個DataReader,導致錯誤。 DateLastUpdated> >解決方案:多個活動結果集(MARS)

> 最簡單的解決方案是在連接字符串中啟用多個活動結果集(火星):

MARS允許數據庫同時處理多個開放光標,從而防止衝突並解決“打開數據標準”錯誤。 這避免了需要手動

封閉的需要,簡化了您的代碼。

>

以上是為什麼Entity Framework投擲'已經有一個與此命令相關聯的開放數據標準器,必須首先關閉”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn