在多线程和多用户系统上,例如Power Apps,操作和数据更改通常并行发生。 在同一数据片段上同时执行两个或多个更新或删除操作时,会出现问题。 这种情况可能会导致数据丢失。 乐观并发功能使应用程序能够检测表中的记录在应用程序检索该记录之后、尝试更新或删除该记录之前,这段时间内是否已在服务器上发生更改。
为脱机同步和所有自定义表启用的所有开箱即用表都支持乐观并发。 可以通过使用代码检索表的元数据或使用 元数据浏览器查看元数据来确定表是否支持乐观并发,并检查列 IsOptimisticConcurrencyEnabled 是否设置为 true。 对于自定义表,此属性默认设置为 true 。
启用乐观并发控制
可以在执行 时,通过将请求的 属性设置为 来启用乐观并发检查行为。 同样,对于一个 DeleteRequest,你需要设置其 ConcurrencyBehavior 属性。
使用 SDK for .NET 上下文进行数据更改时,请在 ConcurrencyBehavior 对象上设置 OrganizationServiceContext。 当调用时,此值会传递给OrganizationServiceContext使用的所有UpdateRequest和SaveChanges()消息。
只能通过调用 SDK API 来设置乐观并发行为。 目前在 Web 应用程序中还没有相关设置。
使用 Web API 实现乐观并发控制
有关使用 Web API 实现乐观并发的信息,请参阅 实现乐观并发。
使用适用于 .NET 的 SDK 实现乐观并发
有关如何使用适用于 .NET 的 SDK 实施乐观并发的信息,请参阅 乐观并发行为。
处理异常
使用乐观并发时,Web 服务调用可能会返回错误异常 <OrganizationServiceFault>中的多个错误条件。
ConcurrencyVersionMismatch (code=-2147088254)
提供行版本并指定 IfVersionMatches 行为时会出现此错误,但现有记录的版本与请求中的行版本不匹配。
ConcurrencyVersionNotProvided (code= -2147088253)
指定 IfVersionMatches 行为但未为行版本提供值时,会收到此错误。
OptimisticConcurrencyNotEnabled (code=-2147088243)
如果对表执行更新时指定了 IfVersionMatches 行为,但未启用乐观并发,则会出现此错误。
检查返回的错误的 Code 属性,查看错误是否与乐观并发相关。 这些错误条件的代码来自
ErrorCodes.cs帮助程序代码。