CosmosDb中不存在CreateStoredProcedureIfNotExists的替代方案/如何创建



我使用的是Microsoft.Azure.Documents.Client2.x,但似乎没有API代码来执行CreateStoredProcedureIfNotExists,就像其他操作一样。

如果Exception已经存在,有没有比忽略它更好的选择?(如果它不存在,我想创建它——在我开始之前,我看不到进行查询以验证需求的价值,因为我的下一步行动将是进行创建[在竞争作家的情况下具有种族条件](

当您使用IfNotExists方法时,SDK内部会为您做完全相同的事情(处理异常并为您创建项(,这就是为什么它们在响应中返回Resource对象。因为他们读过。

您可以简单地为IDocumentClient创建一个扩展方法来实现这一点,并使用此方法来保持代码的整洁。

无论如何,这是对小于1kb的文档的直接读取,因此您只需为此操作支付一个RU。

我最终得到了:

let private createStoredProcedureOrIgnore (client: IDocumentClient) (collectionUri: Uri) (name, body): Async<float> = async {
try let! r = client.CreateStoredProcedureAsync(collectionUri, StoredProcedure(Id = name, Body = body)) |> Async.AwaitTaskCorrect
return r.RequestCharge
with DocDbException ((DocDbStatusCode sc) as e) when sc = System.Net.HttpStatusCode.Conflict -> return e.RequestCharge }
let createStoredProcIfNotExists (log: ILogger) client collUri (sprocName,sprocBody) = async {
let! t, ru = createStoredProcedureOrIgnore client collUri (sprocName,sprocBody) |> Stopwatch.Time
log.Information("Created stored procedure {sprocId} rc={ru} t={ms}", sprocName, ru, (let e = t.Elapsed in e.TotalMilliseconds)) }

对于Conflict,RC是1.67,对于我的情况,RC是不存在的情况6.67