2010-12-16 6 views
2

Ich habe eine Benutzerklasse, die ich aktualisieren möchte. Es gibt eine Benutzertabelle in meiner Datenbank mit zwei Spalten unter anderem: FirstName und Lastname, und es gibt eine berechnete Spalte namens DisplayName, die die beiden mit einem Leerzeichen in der Mitte verkettet. Das NHibernate-Mapping für Display istNHibernate Update verursacht eine Auswahl der berechneten Spalten einer Zeile

<property name="DisplayName" type="string" generated="always"/> 

Wenn ich das Benutzerobjekt aktualisieren und die Transaktion verpflichten, NHibernate läuft eine zusätzliche SELECT-Anweisung nur auf der Eigenschaft Displaynamen, nehme ich an synchron das Objekt und die DB Reihe zu halten. Ich brauche das nicht, da das Objekt gleich nachher aus dem Rahmen gerät.

Gibt es etwas, was ich tun kann, um NHibernate mitzuteilen, dass es nicht notwendig ist, zu diesem Zeitpunkt den aktualisierten DisplayName zu erhalten?

Grüße, F.

+0

Ich kann das nicht beantworten, aber warum mache ich diese Berechnung nicht zum Teil des User-Objekts? (z.B. eine Eigenschaft C#, die die Eigenschaften Vorname und Nachname verkettet). Auf diese Weise müssen Sie nicht die Datenzugriffsebene einbeziehen. – UpTheCreek

+0

Ist dies in der Zuordnung, so dass Sie/suchen gegen Displayname auswählen können? – Phill

+0

@UpTheCreek - Ich wollte dasselbe sagen, aber dann dachte ich, vielleicht versucht er, dagegen zu fragen. Ich habe nur "Fullname" -Dinge als Eigenschaft in der Klasse gemacht, nie als Teil des Mappings. – Phill

Antwort

2

generated="always" bedeutet genau das: „Dies ist ein Wert, der durch die DB jedes Mal erzeugt wird, ich diese Zeile ändern, bitte aktualisieren Sie es für mich“.

NH hat kein Konzept wie "nur aktualisieren, wenn eine bestimmte Spalte geändert".

Meine Meinung ist, dass Sie diesen Wert in Ihrem Domänenmodell anstelle der DB generieren sollten.

+0

Es wurde dann entschieden. Danke an alle! – Michali

Verwandte Themen