Wir haben eine Entität namens Organisation, für die wir das UniqueConstraints-Bundle verwenden. Wir haben eine Eigenschaft namens NetName, die eine UniqueConstraint und eine automatisch generierte ID ist.Den Wert einer ID in RavenDB ändern
Da dies nicht notwendig ist, möchten wir stattdessen die NetName-Eigenschaft als Id verwenden. Damit wir UniqueConstraints nicht benötigen, um zu wissen, dass es einzigartig ist, und auch den Nutzen daraus ziehen können, Load zu verwenden, wenn wir den NetName haben.
Wir brauchten unsere netname ein wenig aufzuräumen, bevor sie als eine Kennung, so haben wir eine neue temporäre-Eigenschaft namens TempUniqueNetName, die jetzt hält den Wert der Verwendung:
"organizations/"+ CleanupId(this.NetName)
So sind wir nun bereit, einfach verschiebe diesen Wert auf unsere ID. Aber wir können es nicht zur Arbeit bringen. Unser Problem ist, dass wir mit der unten angegebenen PatchRequest eine neue Eigenschaft mit dem Namen Id in der Datenbank haben, aber die tatsächliche ID hat immer noch denselben Wert (siehe Screenshot). Gibt es eine bessere (korrekte) Möglichkeit, den Wert einer ID zu ändern?
Das Entity:
class Organization {
public string Id { get; set; }
[UniqueConstraint]
public string NetName { get; set; }
public string TempUniqueNetName{ get; set; }
}
Wir wollen so etwas tun:
_documentStore.DatabaseCommands.UpdateByIndex(typeof(Organizations).Name,
new IndexQuery(),
new[]
{
new PatchRequest()
{
Type = PatchCommandType.Rename,
Name = "TempUniqueNetName",
Value = new RavenJValue("Id")
}
});
Posted Anfrage hier: http://issues.hibernatingrhinos.com/issue/RavenDB-801 –
Ok, danke für deine Antwort. Wir werden wahrscheinlich Ihren Vorschlag verwenden und das Dokument kopieren. Es ist eine einmalige Sache, also ist es egal, dass es eine Weile dauern wird. Hoffentlich wird es das nächste Mal, wenn wir das brauchen, implementiert werden. –
FYI: Die RavenDB Devs haben geantwortet, dass sie dieses Feature nicht hinzufügen werden und stattdessen "Es kann vom Benutzer als ein Transaktionspaar von delete/put relativ einfach implementiert werden . " –