2009-11-29 72 views
0

處理具有分離實體或DTO的三層應用程序(WCF + LinqToSql或EF)中的數據併發性問題的最佳方法是什麼?在三層應用程序中處理數據併發的最佳方法

謝謝。

+0

您指的是「數據併發性」,線程同步還是數據一致性? – 2009-11-29 23:15:55

+0

我的意思是數據一致性,我想找到最好的方法,以防止已被更新的數據被另一個用戶更新的人 – 2009-11-29 23:22:32

回答

0

將所有更改的值包含在where子句中。如果沒有行更新,您知道您的數據已過時,您可以在此處通知用戶並詢問要採取何種行動。

+0

它是否也適用於可能不包含所有實體字段但至少是ID的DTO? – 2009-11-29 23:26:01

+0

是的 - 您正在改變的值是您唯一可能過時的值。 – 2009-11-30 00:07:09

0

這是內置於LINQ to SQL和EF With Column屬性的UpdateCheck屬性。我的選擇是使用LINQ to SQL與分離的POCO實體一起使用,只要您肯定只想使用MS SQL SERVER並且您不需要複雜的數據庫到實體映射。

在這種情況下,我會在每個表中使用單個併發字段,並僅對該字段執行併發檢查。整數字段很好,只需在每次更新時遞增。

請參閱這裏瞭解使用LINQ to SQL進行併發控制。

Concurrency with LINQ to SQL

認爲這將是得心應手太:

LINQ to SQL Optimistic Concurrency Overview

P.S這是所有假設你的解決方案會使用樂觀併發要罰款。如果您處於數據量變化很大的高負載服務器,則可能需要更悲觀的併發解決方案。

1

如果您未使用WCF傳遞所有值,則可以爲表引入一個時間戳(rowversion)字段。該值將作爲您實體和您的DTO的財產。使用LINQ to SQL,您可以選擇使用o ptimistic concurrency檢查,可以指定新的timestamp屬性,而不是比較所有值。

相關問題