我们有一个名为Organization的实体,我们使用UniqueConstraints-bundle。我们有一个名为NetName的属性,它是一个UniqueConstraint和一个自动生成的Id。
由于这是不必要的,我们希望将NetName属性用作Id。因此,我们不需要UniqueConstraints来知道它是唯一的,并且当我们拥有NetName时能够使用Load也可以获益。
我们需要先清理一下我们的netname,然后再将其用作Id,这样我们就创建了一个名为TempUniqueNetName的新临时属性,该属性现在保存的值为:
"organizations/"+ CleanupId(this.NetName)
所以我们现在准备好将这个值移动到我们的Id。但我们无法让它发挥作用。我们的问题是,在下面的PatchRequest中,我们最终得到了一个名为Id的新属性,但是acctual 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")
}
});
答案 0 :(得分:5)
我认为您不能通过修补来更改文档密钥。它实际上并不存储在文档或元数据中 - 它会在加载时复制到@id元数据中,以使您产生错觉,并且Raven Client会将其再次复制到文档中您自己的标识属性中。但实际上,它是底层的esent文档存储中的一个单独值。 Raven必须具体知道如何处理这个并为你伪造它。
您可以手动将文档从旧ID复制到新ID并删除旧文件,但这可能非常耗时。
现在重命名文档密钥没有很好的答案。确实应该有一个DatabaseCommand用于重新键入单个文档,并在修补时将PatchCommandType分离为重新键入。也许这将在未来加入乌鸦。
答案 1 :(得分:1)
您可以检查PUT-DELETE用法的实现,以更新我的github仓库中的ID。 看起来应该是这样的:
A <- matrix(c(1:4, 2,5:7, 3,6,8:9, 4,7,9,10), 4,4)
A[1, -c(1,1)]
spec.mult1 <- function(A,B) {
rA <- nrow(A); cB <- ncol(B)
C <- A %*% B
for (i in 1:rA) for (j in 1:cB)
C[i,j] <- C[i,j] - A[i,i]*B[i,j] - A[i,j]*B[j,j] + ifelse(i==j, A[i,i]*B[j,j], 0)
C
}
spec.mult2 <- function(A) {
dA.A <- diag(A)*A
crossprod(A) - dA.A - t(dA.A) + diag(diag(A)^2)
}
spec.mult3 <- function(A,B) {
rA <- nrow(A); cB <- ncol(B)
C <- A %*% B
for (i in 1:rA) for (j in 1:cB)
C[i,j] <- C[i,j] - A[i,i]*B[i,j] - A[i,j]*B[j,j]
for (i in 1:rA) C[i,i] <- C[i,i] + A[i,i]*B[i,i]
C
}
spec.mult4 <- function(A) {
dA <- diag(A)
dA.A <- dA*A
crossprod(A) - dA.A - t(dA.A) + diag(dA^2)
}
spec.mult5 <- function(sig.adj) {
nr <- nrow(sig.adj); nc <- ncol(sig.adj)
C <- matrix(NA, nr, nc)
for (i in 1:nr) for (j in 1:nc)
C[i,j] <- sum(sig.adj[i, -c(i, j)]*sig.adj[-c(i, j), j])
C
}
spec.mult1(A, A) - spec.mult5(A)
spec.mult2(A) - spec.mult5(A)
spec.mult3(A, A) - spec.mult5(A)
spec.mult4(A) - spec.mult5(A)
https://github.com/Sevsoad/SagaUpdater/
这里还有一些Raven文档:
https://ravendb.net/docs/article-page/3.0/csharp/client-api/commands/documents/put