我需要像下面進行交易:EF6提交的數據讀
- 開始交易:在這裏,我呼籲
context.Database.BeginTransaction()
(請注意context
這裏就不下同一個的問題,我想讀未提交) - 保存聯繫(使用存儲過程完成):此usp也有一個事務。
- 創建基於接觸一些其他記錄
- 提交
我遇到的問題是,在步驟3,我需要從數據庫中讀取一些數據(使用EF應用端做),這尚未提交(從第2步開始)。我試圖這樣做,但它不工作:
context.Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
var contact = context.Contact.SingleOrDefault(x => x.ContactId == intId);
context.Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ COMMITTED;");
我有調試器中運行,並在其中contact
,正在獲取的暫停,但什麼都不會返回。
如果我查詢的SSMS(SQL服務器MGMT工作室)相同的記錄,它返回的結果:
set transaction isolation level read uncommitted
select * from Contact c where c.ContactId = 9999
問題
- 我怎樣才能讀取使用EF6未提交的數據?一些在線搜索引導我創建一個自定義攔截器,但我真的需要嗎?
- 許多文章建議不讀取未提交的數據,但我想不出另一種方式來實現這一點。在那兒?
實際上步驟1是什麼?如果你做了'var tr = context.Database.BeginTransaction();',那麼使用同樣''context''的未來操作應該看到那個事務中未提交的變化。 –
@IvanStoev它只是'this.context.Database.BeginTransaction();'但這與問題中的不一樣。 – CodingYoshi
我明白了。然後嘗試'BeginTransaction(System.Data.IsolationLevel.ReadUncommitted)',它似乎工作(快速測試)。 –