在3层应用程序中处理数据并发的最佳方法

时间:2009-11-29 23:05:56

标签: c# database wcf 3-tier

在具有分离实体或DTO的3层应用程序(WCF + LinqToSql或EF)中处理数据并发问题的最佳方法是什么?

感谢。

3 个答案:

答案 0 :(得分:1)

如果您没有使用WCF传递所有值,则可以向表中引入时间戳(rowversion)字段。此值将作为您实体和DTO的属性包含在内。使用LINQ to SQL,您可以选择使用o ptimistic concurrency检查,可以指定新的时间戳属性,而不是比较所有值

答案 1 :(得分:0)

在where子句中包含所有更改的值。如果没有更新行,您就知道您的数据已过时,您可以在此时通知用户并询问要采取的操作。

答案 2 :(得分:0)

这是内置于LINQ to SQL和EF使用Column属性的UpdateCheck属性。我的选择是使用带有分离的POCO实体的LINQ to SQL,只要你肯定只想要使用MS SQL SERVER并且你不需要复杂的数据库到实体映射。

在这种情况下,我会在每个表中使用单个并发字段,并仅对该字段执行并发检查。整数字段很好,只需在每次更新时递增它。

请参阅此处了解使用LINQ to SQL进行并发控制。

Concurrency with LINQ to SQL

认为这也很方便:

LINQ to SQL Optimistic Concurrency Overview

P.S这是假设您的解决方案使用乐观并发性将会很好。如果您处于数据变化很大的高负载服务器中,则可能需要更悲观的并发解决方案。