我正在用头撞墙。
我有一个函数,基本上是一个名为 的 Upsert TryCreateOrUpdate。我确实意识到现在存在 upsert 函数,但这是一些较旧的代码。这是函数:
public static async Task<string> TryCreateOrUpdate<T>(T data) where T : ViewModelBase
{
var options = string.IsNullOrWhiteSpace(data.PartitionKey) ? null : new RequestOptions { PartitionKey = new PartitionKey(data.PartitionKey) };
try
{
var response = await Client.CreateDocumentAsync(Collection.SelfLink, data, options, true);
}
catch (DocumentClientException dce)
{
switch (dce.StatusCode.Value)
{
...
case HttpStatusCode.Conflict:
try
{
var link = UriFactory.CreateDocumentUri(_databaseId, _collectionId, data.Id);
await Client.ReplaceDocumentAsync(link, item, options);
}
catch (Exception e)
{
return $"There was an error updating the document.";
}
break;
default:
...
}
}
catch (Exception e)
{
return "There was an unknown error creating the document.";
}
return "OK";
}
我正在尝试插入一个 id 为 6 位数字的文档作为字符串。
我检查了我的 Cosmos DB,可以确认数据库中没有具有我尝试更新插入的 id 的文档。所以它应该会导致创建。
创建文档的行抛出一个DocumentClientException:
系统中已存在具有指定 ID 的实体。
但是,替换代码行会引发此异常:
系统中不存在具有指定 ID 的实体。
嗯什么?究竟存在还是不存在?!
正如我所说,我在运行之前进行了检查,发现该文档不存在。
我什至尝试更改所有这些代码以使用较新的代码UpsertDocumentAsync,但仍然收到错误
系统中已存在具有id的实体
尽管正如我所说,该文件并不存在。
慕斯王
POPMUISE
相关分类