有誰知道如何在實體框架7中創建顯式事務? 我找到的所有信息都是指EF的第6版。文檔也很不完整,所以有人可以提供一個例子嗎?實體框架中的顯式事務7
我有一個dbContext,我必須刪除一個實體和它的相關對象,然後再次插入它們,但是在同一個事務中,所以我總是會有一個「版本」的行。
有誰知道如何在實體框架7中創建顯式事務? 我找到的所有信息都是指EF的第6版。文檔也很不完整,所以有人可以提供一個例子嗎?實體框架中的顯式事務7
我有一個dbContext,我必須刪除一個實體和它的相關對象,然後再次插入它們,但是在同一個事務中,所以我總是會有一個「版本」的行。
EF7中只包含交易功能(參見the statement)。撥打.SaveChanges()
(或.SaveChangesAsync()
)應使用自動交易。然後我想,例如,某些實體項目的狀態應在之前標記爲已刪除。
人們可以通過內部的
using (context.Database.BeginTransaction()) {
/*do something*/
}
該交易將通過在using
塊結束的.Dispose()
呼叫致力於纏繞操作的一些片段的數據庫上顯式啓動事務。人們可以選擇使用
using (var transaction = await context.Database.BeginTransactionAsync()) {
/*do something*/
/*one can call
transaction.Rollback() or transaction.Commit()
explicitly in the code */
}
它一般都應該看起來像以前版本的實體框架。例如見the post。
這不是RC-1的最終版本,需要更新版本的DatabaseFacade。 – user764754
@ user764754:你確認了嗎?看看RC1中包含的[測試](https://github.com/aspnet/EntityFramework/blob/7.0.0-rc1/test/EntityFramework.Relational.FunctionalTests/TransactionTestBase.cs#L62)。它使用'BeginTransaction()' – Oleg
在RC-1中它是EntityFramework.Relational中的擴展方法。後來在EntityFramework.Core中使用DatabaseFacade。我只提到核心RC-1,這就是爲什麼我沒有找到它。 – user764754
你可以在你想使用事務的地方包含小代碼片段嗎?你有'dbContext'或'DbCommand'嗎?通常應該使用'using(context.Database.BeginTransaction()){.../*做某事*/...}',但可以使用'await context.Database.BeginTransactionAsync()'來代替。可以使用'var transaction = context.Database.BeginTransaction()){...}'並顯式調用'transaction.Commit()'來提交事務或調用'transaction.Rollback()'來回滾。有更奇特的[EnlistTransaction](https://msdn.microsoft.com/en-us/library/ms254973(v = vs.110).aspx)。 – Oleg
沒有那麼奇特...尚;-)所以,字節是相同的比在EF6?然後我錯過了一些東西。我有一個dbContext,我必須刪除一個實體和它的相關對象,然後再插入它們。 – Vi100
好的,你的代碼工作,但它與EF6相同。你介意我是否刪除了這個問題,或者更喜歡我編輯它,並將你的評論發佈爲答案? – Vi100