gpt4 book ai didi

azure-cosmosdb - CosmosDB 中的触发器未触发?

转载 作者:行者123 更新时间:2023-12-04 22:11:10 25 4
gpt4 key购买 nike

我在我的 CosmosDB 集合中创建了一个简单的 Pre Trigger。

function testTrigger() {
var context = getContext();
var request = context.getRequest();
var documentToCreate = request.getBody();
documentToCreate["test"] = "Added by trigger";
request.setBody(documentToCreate);
}
虽然看起来,这个触发器根本没有被触发。
同样令人恼火的是,getContext() 调用在脚本资源管理器中标有绿色波浪线。
enter image description here

最佳答案

触发器似乎不是......好吧......触发的问题是你没有在触发操作中指定它。触发器不是自动的。必须为您希望它们执行的每个数据库操作指定它们。

就我个人而言,我认为这是一个不幸的设计选择,我决定在我自己的代码中根本不使用触发器。相反,我将所有业务规则约束嵌入到存储过程中。我发现这更简洁一些,并且消除了我会忘记指定触发器或(更有可能)其他人向数据库编写代码甚至不知道他们应该指定触发器的担忧。我意识到有人可以通过直接访问文档来绕过我的存储过程并违反业务规则,但我不知道 DocumentDB 中有什么方法可以防止这种情况发生。如果有一种方法可以使触发器自动进行,那么就可以防止这种情况发生。

使用 REST API 时,您可以使用 x-ms-documentdb-pre-trigger-include 在 header 中指定触发器。或 x-ms-documentdb-post-trigger-include .在 node.js SDK 中,您使用 RequestOptions preTriggerIncludepreTriggerInclude属性(property)。对于 .NET,您可以像这样指定它:

Document createdItem = await client.CreateDocumentAsync(collection.SelfLink, new Document { Id = "documentdb" },
new RequestOptions
{
PreTriggerInclude = new List<string> { "CapitalizeName" },
});

有关绿色波浪线的讨论,请参阅评论。

关于azure-cosmosdb - CosmosDB 中的触发器未触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32647843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com