Ich baue ein Blog/CMS-System (zum Spaß, ich weiß, es gibt eine Tonne da draußen, die ich verwenden könnte).
Ich habe eine einfache Tag-Entität, die nur eine Id (int) und eine TagName (String) -Eigenschaft hat. Ich möchte nHibernate so konfigurieren, dass ich so etwas tun kann:Wie verhindert man das Einfügen von doppelten Daten mit nHibernate?
var tag1 = Tag.CreateTag("duplicate tag test"); // Id=0 at this point
var tag2 = Tag.CreateTag("duplicate tag test"); // Id=0 at this point
TagRepository.Save(tag1); // tag1.Id is non-zero
TagRepository.Save(tag2); // tag2.Id should be the same as tag1.Id at this point, but it's not
Assert.AreEqual(tag1, tag2);
Ich sehe Save (Tag) so etwas wie ein Look-up zu tun, und wenn der Tag bereits vorhanden ist, irgendwie tag2 mit tag1 Werte ersetzen. nHibernate arbeitet mit einer Magie, die die Eigenschaften des Parameters ändert, obwohl er nicht als out-Parameter übergeben wird. Kann mir jemand sagen, was hier los ist und wie ich diese Methode reparieren kann, um das zu tun, was ich will? Ich versuche zu vermeiden, das out-Schlüsselwort für den Tag-Parameter zu verwenden.
Dieser Code fügt Duplikate ein? Könntest du ein bisschen mehr erklären? –
Nein, dieser Code nicht. Wenn ich den Aufruf GetByTagName/check entferne, tut es. Ich suche, wie nHibernate das Id-Feld des Tag-Objekts ändert, das an die Methode übergeben wird. Es ist kein out-Parameter, aber nachdem die Methode Save zurückgegeben wurde, wird die Variable tag.Id von 0 auf ungleich Null geändert, wenn ein neues Tag erstellt wird. Ich möchte, dass das Gleiche passiert, wenn das Tag bereits existiert (d. H. Einen FindOrInsert-Methodestyp implementieren). –