Hier ist das Szenario:
Ich habe eine Winforms-Anwendung mit NHibernate. Wenn sie gestartet wird, fülle ich eine DataGridView mit den Ergebnissen einer NHibernate-Abfrage. Dieser Teil funktioniert gut. Wenn ich einen Datensatz in dieser Liste aktualisiere und die Sitzung leere, wird die Aktualisierung in die Datenbank übernommen. Wenn ich das Formular nach der Aktualisierung schließe, rufe ich eine Methode auf, die eine Liste von Objekten abruft, um die DataGridView erneut zu füllen, um die Änderung aufzugreifen und auch alle anderen Änderungen zu erhalten, die möglicherweise von jemand anderem vorgenommen wurden. Das Problem ist, dass NHibernate die Änderung des aktualisierten Datensatzes nicht in der Liste wiedergibt. Wenn ich einen Datensatz einfüge oder lösche, funktioniert alles einwandfrei. Nur wenn ich einen Datensatz aktualisiere, tritt dieses Verhalten auf. Ich habe es auf NHibernate mit seinem Caching-Mechanismus eingegrenzt. Ich kann nicht herausfinden, wie ich NHibernate dazu bringen kann, nach einer Aktualisierung von der Datenbank abzurufen, anstatt den Cache zu verwenden. Ich habe in den NHibernate-Foren gepostet, aber die Vorschläge, die sie mir gegeben haben, haben nicht funktioniert. Ich habe darauf hingewiesen, und niemand hat mir geantwortet. Ich werde nicht angeben, was ich versucht habe, falls ich es nicht richtig gemacht habe. Wenn Sie mit etwas antworten, das ich genau ausprobiert habe, werde ich es in den Kommentaren zu Ihrer Antwort angeben.
Dies ist der Code, mit dem ich die Liste abrufe:
public IList<WorkOrder> FindBy(string fromDate, string toDate)
{
IQuery query = _currentSession.CreateQuery("from WorkOrder wo where wo.Date >= ? and wo.Date <= ?");
query.SetParameter(0, fromDate);
query.SetParameter(1, toDate);
return query.List<WorkOrder>();
}
Die Sitzung wird an die Klasse übergeben, wenn sie konstruiert wird. Ich kann auch meine Mapping-Datei posten, aber ich bin mir nicht sicher, ob damit etwas nicht stimmt, da alles andere funktioniert. Hat das schon mal jemand gesehen? Dies ist das erste Projekt, bei dem ich NHibernate verwende, vielen Dank für die Hilfe.