我有一个我想在 RavenDB 中删除/更新的实体,但它没有与任何会话相关联。 AFAIK 有两种方法可以做到这一点。我以删除为例,但我认为它应该与 put 相同。
负载方式:
var trackedEntity = await this.asyncSession.LoadAsync<MyEntity>(untrackedEntity.Id, cancellationToken);
session.Delete(trackedEntity);
指挥方式:
var command = new DeleteDocumentCommand(untrackedEntity.Id, null);
await session.Advanced.RequestExecutor.ExecuteAsync(command, session.Advanced.Context);
有了负载,您需要额外访问 RavenDB 以获取实体并通过会话跟踪它。 使用命令你不需要额外的行程,但你没有并发控制的变化向量。
我会说加载的方式更安全,更慢,命令的方式更快,但你可能会遇到并发问题。
最后的假设是否正确?
命令遇到并发问题的可能性有多大?
能否概括说明哪种方式更可取?