gpt4 book ai didi

ravendb - 更改 RavenDB 中的 Id 值

转载 作者:行者123 更新时间:2023-12-03 21:45:18 26 4
gpt4 key购买 nike

我们有一个名为 Organization 的实体,我们在其上使用 UniqueConstraints-bundle。我们有一个名为 NetName 的属性,它是一个 UniqueConstraint 和一个自动生成的 Id。
由于这是不必要的,我们希望使用 NetName 属性作为 Id。这样我们就不需要 UniqueConstraints 来知道它是唯一的,并且在我们拥有 NetName 时也可以从能够使用 Load 中获益。
在将其用作 Id 之前,我们需要稍微清理一下我们的网络名,因此我们创建了一个名为 TempUniqueNetName 的新临时属性,它现在拥有以下值:

"organizations/"+ CleanupId(this.NetName)
所以我们现在准备简单地将该值移动到我们的 Id 中。但我们无法让它发挥作用。我们的问题是,在下面的 PatchRequest 中,我们最终在数据库中获得了一个名为 Id 的新属性,但实际 Id 仍然具有相同的值(请参见屏幕截图)。是否有更好(正确)的方法来更改 Id 的值?
实体:
class Organization {
public string Id { get; set; }

[UniqueConstraint]
public string NetName { get; set; }

public string TempUniqueNetName{ get; set; }
}
我们想做这样的事情:
_documentStore.DatabaseCommands.UpdateByIndex(typeof(Organizations).Name,
new IndexQuery(),
new[]
{
new PatchRequest()
{
Type = PatchCommandType.Rename,
Name = "TempUniqueNetName",
Value = new RavenJValue("Id")
}
});
Value has not changed

最佳答案

我认为您不能通过修补来更改文档 key 。它实际上并不与文档或元数据一起存储——它在加载时被复制到 @id 元数据中,让您产生它在那里的错觉,然后 Raven Client 再次将它复制到文档中您自己的身份属性中。但实际上,它是底层 esent 文档存储中的一个单独值。 Raven 必须特别知道如何处理并为您伪造它。

您可以手动将文档从旧 ID 复制到新 ID 并删除旧 ID,但这可能会很耗时。

现在重命名文档 key 没有很好的答案。确实应该有一个 DatabaseCommand 用于重新加密单个文档,并在修补时使用单独的 PatchCommandType 来重新加密。也许这会在 future 添加到 raven 中。

关于ravendb - 更改 RavenDB 中的 Id 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14139655/

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