2016-05-27 37 views
0

我有一個很長的請求,它使用事務將數據導入到系統中。問題是,當單個事務正在運行時,在該時間段內,對其正在使用的表的其他請求被阻止並與超時異常事務運行時實體框架超時

運行下去,結束等待操作超時

我怎樣才能讓正常讀取數據,即使正在運行的事務那裏。

P.S.我不認爲這是SQL悲觀的數據鎖定,因爲在事務期間,我可以使用SQL Management Studio從表中選擇數據。

+0

我堅持在ADO.NET中使用SqlBulk,因爲您的場景實體不適合。我有同樣的問題,並通過不使用實體解決。 –

回答

1

您可以在SQL服務器中啓用Snapshot Isolation,這與設置READ_COMMITTED_SNAPSHOT設置一起會改變您所看到的行爲。

長時間運行的事務正在進行中,而不是其他表被鎖定,它們將在事務開始之前看到該表中的行。

要啓用此:

ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON 
ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON 

這實際上是如果你的數據庫是由代碼優先遷移創造了實體框架6的默認行爲。

+0

他們是否也可以導入其他數據? – Gab

+0

爲什麼標準讀取承諾級別不顯示先前承諾的條目,而不是阻止訪問? – Gab

+0

由於讀取提交不是讀取提交快照 - 這是區別。使用快照時,在事務運行時會保留受影響行的多個版本。 – Richard