運行使用實體框架5 .NET 4.5與SQL Server 2012.我有一個功能,從第三方源下載大量數據並解析它進入我的數據庫。它下載,解析到我的實體並以2500個記錄的批次向我的db插入/更新。數據庫表無響應,而插入/更新使用實體框架W/SqlBulkCopy
爲了插入/更新我的數據庫,我正在使用SqlBulkCopy類。當它插入/更新我的數據庫時,它插入/更新的表似乎部分無響應。如果我從SSMS運行一個簡單的選擇查詢,它將拉出一些記錄,然後掛起,直到應用程序完成大容量插入/更新。我的數據庫中的這些數據通過WCF服務提供給多個源,並且如果我嘗試在其中一個源加載數據,則由於數據庫未響應數據而超時。一旦插入/更新完成,WCF服務和SSMS查詢都將繼續正常運行。
我認爲這可能是由於SqlBulkCopy,所以我刪除了該類的使用,只是調用了一個context.SaveChanges(),它產生完全相同的結果。然後我運行了一個測試,將EF完全從圖片中刪除,並使用了經典的ADO.NET(沒有SqlBulkCopy),並且一切都很好。我把SqlBulkCopy插回去了,把EF留下了,再次,表似乎被鎖定,直到完成。
所以我假設這裏的罪魁禍首是EF和SqlBulkCopy。關於如何解決這個問題並仍然使用EF和SqlBulkCopy的任何想法?或者可能導致這種情況發生的原因?
我不認爲我的代碼的例子在這裏是必要的,但如果你想看,請讓我知道。提前致謝。
我認爲這是一個服務器設置。我在我的客戶使用的共享託管服務器上有此問題。在數據傳輸過程中,我甚至可以不用「SELECT TOP 1」。它只會坐在那裏「執行查詢..」30-45分鐘。 –
這不是共享服務器。數據庫運行在由2個具有中央存儲節點組成的sql羣集中。一次只能運行一個,另一個是故障轉移。該應用程序託管在2個其他負載均衡的專用Web服務器上。長時間的「執行查詢」是我通過SSMS體驗的同一件事。如果你知道這可能是什麼設置,這可能會有所幫助。 – Ricketts