2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
感謝大家的幫助。事實(shí)證明,丟失的連接是我們的數(shù)據(jù)庫(kù)而不是客戶端的。不完全確定原因,但似乎有幫助的是將我們的 BulkInsert 方法在 using 塊內(nèi)創(chuàng)建 SqlBulkCopy 對(duì)象。我們還在失敗時(shí)重新建立了連接。這有點(diǎn)hacky,但它正在工作。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
在 EF6 之前,無(wú)論 DbContext 是否擁有它,它都會(huì)在被釋放時(shí)關(guān)閉連接。從 EF6 開始,上下文遵循contextOwnsConnection
傳遞給構(gòu)造函數(shù)的標(biāo)志(參見此處)。從您的偽代碼中不清楚您如何實(shí)例化連接和上下文,因此假設(shè)您在循環(huán)中創(chuàng)建上下文并傳遞打開的連接。如果是這種情況,您有幾個(gè)選擇:
升級(jí)到 EF6,或
僅對(duì)所有保存使用一個(gè) DbContext,或者
將所有記錄加載到內(nèi)存中,并在其自己的 DbContext 中以塊的形式處理它們,或者
分塊加載,分塊處理
如果出于性能原因避免使用相同的上下文進(jìn)行處理,則可以使用 .AsNoTracking()。MSDN 上有一篇關(guān)于 EF 性能調(diào)整的文章,以防您需要更多。
- 2 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)