Ralat "Open DataReader" Rangka Kerja: Perangkap biasa
Rangka kerja entiti moden memudahkan interaksi pangkalan data, tetapi ralat "sudah ada datareader terbuka yang berkaitan dengan perintah ini yang mesti ditutup terlebih dahulu" tetap menjadi sakit kepala yang kerap. Artikel ini menerangkan punca akar dan menyediakan penyelesaian.Pertimbangkan senario ini: pertanyaan mengambil data akaun, kemudian melakukan pemprosesan selanjutnya:
<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>
, ditunjukkan di bawah, menambah pertanyaan pangkalan data lain: DateLastUpdated
<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
membuka lagi DateLastUpdated
tanpa menutup yang pertama, yang membawa kepada kesilapan.
Penyelesaian: Set hasil aktif berganda (MARS)
Pembetulan paling mudah adalah untuk membolehkan pelbagai set hasil aktif (MARS) dalam rentetan sambungan anda:
<code class="language-csharp">Data Source=myServer;Initial Catalog=myDatabase;MultipleActiveResultSets=true</code>
manual, memudahkan kod anda. DataReader
Atas ialah kandungan terperinci Kenapa rangka kerja entiti membuang 'Sudah ada datareader terbuka yang berkaitan dengan arahan ini yang mesti ditutup terlebih dahulu'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!