簡體   English   中英

在不跨越多個上下文對象的情況下,Entity Framework 4中的TransactionScope是否有用途?

[英]Are there uses for TransactionScope in Entity Framework 4 in situations that do not span multiple context objects?

我正在做我的第一個使用EF4的大型項目,並且在實現某些業務場景時一直在考慮並發情況。 我了解EF通過將實體屬性上的“並發模式”設置為“固定”來建立對開放式並發的支持。 在大多數情況下,這似乎已足夠。 我想知道的幾件事:

  1. 在首先驗證一個實體不存在的情況下,然后插入該實體。 從技術上講,有人可以在我的驗證和插入之間的瞬間插入該實體。 用EF處理這種情況的最佳實踐是什么? 自然,我在考慮兩種可能的解決方案,悲觀並發或處理將要發生的唯一約束異常。

  2. 我試圖記住,如果在SQL中發出Begin Transaction / Commit Transaction塊是否會自動鎖定所涉及的表,這意味着它將迫使我在上文中提到過悲觀的情況。 如果是這樣,將這兩個EF操作包裝到TransactionScope中是否會獲得相似的結果?

  3. 如果TransactionScope不會強制悲觀並發,那會是什么?

  1. DB約束是唯一可靠的解決方案,因為它是唯一可以看到其他編寫者未提交事務的解決方案。
  2. 不要以為SQL Server會鎖定表。 它可能是鎖定行。
  3. 揮之不去,無懈可擊。 對於任何數據訪問技術而言,通常這都是一個壞主意。 請改用約束。

不使用多個上下文時為什么要使用TransactionScope 好吧,也許您需要在一次事務過程中獲得服務器生成的密鑰(請考慮SCOPE_IDENTITY )。 通常,當您多次調用SaveChanges()必須成組成功或失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM