Seb*_*ack 6 unique-constraint ravendb
我们有一个名为Organization的实体,我们使用UniqueConstraints-bundle.我们有一个名为NetName的属性,它是一个UniqueConstraint和一个自动生成的Id.
由于这是不必要的,我们希望将NetName属性用作Id.因此,我们不需要UniqueConstraints来知道它是唯一的,并且当我们拥有NetName时能够使用Load也能获得好处.
在将它用作Id之前,我们需要稍微清理一下我们的网络名,因此我们创建了一个名为TempUniqueNetName的新临时属性,该属性现在保存的值为:
"organizations/"+ CleanupId(this.NetName)
Run Code Online (Sandbox Code Playgroud)
所以我们现在准备好将该值移动到我们的Id.但我们无法让它发挥作用.我们的问题是,在下面的PatchRequest中,我们最终得到了一个名为Id的新属性,但是acctual Id仍然具有相同的值(见截图).是否有更好(正确)的方法来更改Id的值?
实体:
class Organization {
public string Id { get; set; }
[UniqueConstraint]
public string NetName { get; set; }
public string TempUniqueNetName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我们想做这样的事情:
_documentStore.DatabaseCommands.UpdateByIndex(typeof(Organizations).Name,
new IndexQuery(),
new[]
{
new PatchRequest()
{
Type = PatchCommandType.Rename,
Name = "TempUniqueNetName",
Value = new RavenJValue("Id")
}
});
Run Code Online (Sandbox Code Playgroud)

我不认为您可以通过修补来更改文档密钥.它实际上并不存储在文档或元数据中 - 它会在加载时复制到@id元数据中,以使您产生错觉,并且Raven Client会将其再次复制到文档中您自己的标识属性中.但实际上,它是底层的esent文档存储中的一个单独值.Raven必须具体知道如何处理这个并为你伪造它.
您可以手动将文档从旧ID复制到新ID并删除旧文件,但这可能非常耗时.
现在重命名文档密钥没有很好的答案.确实应该有一个DatabaseCommand用于重新键入单个文档,并在修补时将PatchCommandType分离为重新键入.也许这将在未来添加到乌鸦.
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |