在具有分离实体或 DTO 的 3 层应用程序(WCF + LinqToSql 或 EF)中处理数据并发问题的最佳方法是什么?
谢谢。
如果您没有使用 WCF 传递所有值,则可以向表中引入时间戳(rowversion)字段。此值将作为您的实体和 DTO 的属性包含在内。使用 LINQ to SQL,您可以选择使用乐观并发检查,可以指定新的时间戳属性而不是比较所有值
在 where 子句中包含所有更改的值。如果没有更新行,您就知道您的数据已过时,您可以在此时通知用户并询问要采取的操作。
这内置于 LINQ to SQL 和 EF 中,带有 Column 属性的 UpdateCheck 属性。我的选择是使用带有分离 POCO 实体的 LINQ to SQL,只要您肯定只想使用 MS SQL SERVER 并且不需要复杂的数据库到实体的映射。
在这种情况下,我将在您的每个表中使用单个并发字段,并仅针对该字段执行并发检查。整数字段很好,只需在每次更新时增加它。
有关使用 LINQ to SQL 的并发控制,请参见此处。
认为这也很方便:
PS这一切都假设您的解决方案使用乐观并发会很好。如果您在数据变化很大的高负载服务器中,则可能需要更悲观的并发解决方案。