2010-12-16 5 views
7

Generiert NHibernate immer Update für alle Spalten?NHibernate generiert Update-Anweisung für alle Spalten

Ist es normales Verhalten für NHibernate oder mein Fehler? Ich verwende Fluent NHibernate und AutoMapping.

+1

Andy, wenn einige deiner anderen Fragen eine Lösung aus der Antwort anderer kennen, akzeptiere sie bitte, damit sie anderen helfen kann, die dieselbe Frage haben wie deine. –

Antwort

10

Das ist das Standardverhalten, aber Sie können NH-Update-modifizierte Spalten nur durch Hinzufügen von dynamic-update="true" zu Ihrem <class>-Mapping machen.

+0

schnappen, schlagen Sie mich dazu :) –

+0

+1 Für Erwähnung 'dynamic-update' in' 'Mapping. Das habe ich vergessen, seit ich das letzte Mal NHibernate benutzt habe. =) –

+0

@Mauricio ¿es una competencia a ver quién se rasca más? Mira que tengo años de experiencia ... ;-) –

-2

NHibernate aktualisiert immer alle zugeordneten Spalten. Dies sollte kein Problem sein, wenn sich die anderen Spalten nicht geändert haben, da die Daten bei der Aktualisierung zuvor aus dem zugrunde liegenden Datenspeicher gepumpt wurden. Daher wurden die Spaltenwerte im Grunde nur auf ihre ursprünglichen Werte zurückgesetzt. Kein Problem. Wenn Sie dieses Verhalten außer Kraft setzen möchten, müssen Sie die IInterceptor Schnittstelle implementieren.

+2

Das ist falsch. Siehe meine Antwort. –

+0

Was ist der Unterschied zwischen "Das ist das Standardverhalten [...]" und "NHibernate aktualisiert immer alle zugeordneten Spalten [...]". Diese beiden Sätze sind mir gleich. Also, kein Downvote ist hier verdient. Außerdem könnte dieses "dynamische Update" durch Implementieren der "IInterzeptor" -Schnittstelle durchgeführt werden. Also, das ist meiner Meinung nach überhaupt nicht falsch. Obwohl meine Antwort nicht über 'dynamic-update' aussagt, was ich demütig gestehe, ist ein eleganterer Ansatz, der Downvote ist unverdient. –

+2

Der erste Satz besagt, dass Sie das Verhalten leicht ändern können (indem Sie einfach den Standardwert "false" in "true" ändern), während letzteres bedeutet, dass Sie nicht arbeiten können oder viel arbeiten müssen, um etwas anderes zu tun. Ich habe keine Ahnung, wie man es mit einem IInterceptor macht, aber es ist eine Mapping-Option, die nicht benötigt wird. Ich habe nur downvoted, weil die Antwort irreführend war, nehmen Sie es nicht persönlich :-) –

Verwandte Themen