Ich habe sehr einfache unidirektionale Abbildungen. siehe unten:
%Vor%Nach diesem Post nach dem Nhibernate 3 und höher sollte das Setzen des Schlüssels als nicht Nullable das Insert-Update-Problem beheben (Das Problem, wenn NHibernate eine Einfügung mit einem Fremdschlüssel ausgibt, der auf null gesetzt ist, und dann eine Aktualisierung, um den Fremdschlüssel zu aktualisieren, um den Wert zu korrigieren), aber das ist nicht der Fall für mich. Wenn ich den Schlüssel als nicht nullfähig festlege, gibt NHibernate eine korrekte insert-Anweisung aus
%Vor%Wie Sie sehen, fügt es das ContactId-Feld ein, aber danach gibt es immer noch die update-Anweisung
aus %Vor%Also, um das Problem zu klären. NHibernate fügt die Kontaktzeile mit korrekt zugewiesenem Fremdschlüssel ein und gibt anschließend eine Aktualisierungsanweisung aus, um den Fremdschlüssel (ContactId) zu aktualisieren, der redundant ist.
Wie kann ich diese redundante Update-Anweisung loswerden? Danke.
Übrigens verwende ich die neueste Version von NHibernate und Fluent NHibernate. Die Datenbank ist SQLite
Sie können nicht ab 3.2.0 BETA.
In Version 3.2.0 BETA führte eine Verbesserung zu Eins-zu-vielen zu einer Unidirektionalität der Eins-zu-Viele-Beziehungen (eigentlich bin ich mir nicht sicher, ob das so ist).
Vor 3.2 müssten Sie den Fremdschlüssel so einstellen, dass Nullen für diese Art von Beziehung funktionieren. Also würde ich die Tatsache ignorieren, dass dies passiert und einfach damit gehen. Andernfalls müssen Sie es in eine vollständig bidirektionale Beziehung ändern.
- [NH-941] - Eins-viele, die nullbare Fremdschlüssel benötigen
Versionshinweise oder JIRA-Problem
bearbeiten Auch die Antwort auf den Beitrag, auf den Sie verweisen, besteht darin, save null-save-update
zu reparieren, anstatt das zusätzliche Update zu reparieren
Versuchen Sie, inverse
auf true
für das Mapping festzulegen und die Beziehung im Code zuzuweisen.
Inverse
bedeutet, dass das Kind dafür verantwortlich ist, die ID des Elternteils zu halten.
z.B.
%Vor%Wenn Sie die Einfügung für den PhoneNumber-Datensatz ausführen, kann NH die ContactId einfügen, ohne eine separate Aktualisierung vornehmen zu müssen.
Das habe ich früher in NH 2 gemacht, ich würde annehmen, dass das Verhalten in 3 immer noch gleich funktioniert.
Ich weiß nicht, ob Sie es wirklich loswerden können.
Versuchen Sie, einen anderen ID-Generator als nativ zu verwenden. Es zwingt NH, den Datensatz nur einzufügen, um die ID zu erhalten. Die ID wird für jede Entität in der Sitzung verwendet, sodass sie später nicht eingefügt werden kann. Es kann nachfolgende Aktualisierungen geben. Verwenden Sie Hi-Lo oder etwas Ähnliches.
Bearbeiten
Warum verwenden Sie in diesem Fall keine Komponente? Sie müssen die Telefonnummer nicht separat zuordnen, wenn sie nur aus einer Nummer besteht. So etwas (ich bin kein FNH-Benutzer, also kann es falsch sein):
%Vor%Tags und Links mapping nhibernate fluent-nhibernate