In Ihrem Beispielcode rufen Sie Update
für eine Entität auf. Dies gilt für das Aktualisieren von getrennten Entitäten, Entitäten, die von Ihrer aktuellen NHibernate-Sitzung nicht erfasst werden.
Wenn Sie eine gelöschte Entität aktualisieren, weisen Sie NHibernate an, die bereitgestellte Entität zu übernehmen und sie als ihren vollständigen neuen Status zu betrachten, um sie in der Datenbank zu aktualisieren. Daher haben alle Eigenschaften, die Sie nicht festgelegt haben, ihre Standardwerte, und NHibernate wird in Betracht ziehen, die Datenbank mit diesen Standardwerten zu aktualisieren.
Wenn Sie nur eine Eigenschaft ändern möchten, müssen Sie sie zuerst mit NHibernate laden, ändern Sie die Eigenschaft und dann Flush
die Sitzung.
var r = session.Load<Rezervace>(id);
r.Stav = 1;
session.Flush();
Es gibt keine Notwendigkeit, NHibernate zu sagen, welche Entität aktualisieren Sie, wenn das Unternehmen aus der aktuellen Sitzung geladen wurde.
Standardmäßig aktualisiert NHibernate weiterhin alle Eigenschaften mit ihren vorherigen Werten und die geänderte mit ihrem neuen Wert. Wie von Rabban answer angegeben, müssen Sie dynamic-update
in Ihrer Klassenzuordnung aktivieren, um dieses Verhalten zu ändern, und NHibernate muss nur die geänderte Eigenschaft aktualisieren.
Hinweise:
Ich halte jetzt sollte ich nicht aber geantwortet:
- Flagge die Frage zum Schließen entweder als unklar oder doppelte (heute unklar gemacht).
- Zeigen Sie auf aktuelle mögliche Antworten in bereits bestehenden Fragen. (Fertig in this comment.)
This answer zu einer dieser anderen Fragen ist übrigens besser als meins, wenn wir im Einzelfall sind.
was meinst du, wenn du einen Parameter sagst? –
Sie können 'Dynamic-Update' in Ihren Mappings auf true setzen. Aber Sie müssen es für jede Klasse festlegen, wo Sie dieses Verhalten möchten. – Rabban
@Rabban ok, also wie mache ich dann das Update ... sowas wie: rezervaceDao.Update (r.Stav); hat nicht funktioniert – pajasv