2 Stimmen

NHibernate und INotifyPropertyChanged

Ich habe einige Probleme mit der Bindung an Objekte aus NHibernate mit Lazy Loading abgerufen. Ich habe etwas über das Problem gelesen und bin verwirrt, was ich tun muss, um die Dinge hier zu beheben.

Wie ich es verstehe, hat das Problem mit der Art und Weise zu tun, wie NHibernate die Proxys für Dinge behandelt, die noch nicht geladen wurden. Hat jemand NHibernate mit Lazy Loading und INotifyPropertyChanged implementiert?

Momentan funktioniert INotifyPropertyChanged, wenn ich Lazy-Loading deaktiviere, aber ansonsten werden keine UI-Elemente aktualisiert, wenn sie an Dinge gebunden sind, die lazy geladen werden. Ich bin bereits ein bisschen über meinen Kopf mit all dies und die Proxy-Implementierung ist noch mehr fremd für mich, so dass ich nicht genau, was es ist ich sogar hier brauchen :) Ich hoffe, dass es eine einigermaßen einfache Lösung gibt.

2voto

Justin Punkte 2282

Ich habe es herausgefunden. Ich musste dem Beispiel hier folgen: http://www.progware.org/Blog/post/NHibernate-PropertyChanged-event-and-WPF.aspx

Der Schritt, der zu fehlen schien, war, dass ich eine ProxyFactoryFactory benötigte, die die in diesem Beispiel erstellte Datenbindungsfabrik zurückgab: http://ayende.com/Blog/archive/2009/08/07/nhibernate-amp-inotifypropertychanged.aspx

Hoffentlich ist dies für jemanden hilfreich.

0voto

ktutnik Punkte 5742

Wenn Sie sicher sind, dass Sie Ihre Domain mit NH Interceptor proxyisiert haben, sollte alles gut funktionieren. Es sei denn, Sie haben einen Fehler bei der Sitzungsverwaltung gemacht, da das Abfangen außerhalb des Sitzungsbereichs nicht funktioniert. Haben Sie Ihre Sitzung per Methodenaufruf Ihres Repositorys mikroverwaltet?

Eigentlich ist die beste Praxis für Nicht-Web-Basis-Anwendung verwaltet Sitzung pro Formular, vielleicht haben Sie gelesen este Dieser Artikel erklärt die Verwaltung von Sitzungen pro Formular, aber die Lösung ist etwas unsauber, da die Sitzungen im Präsentator verteilt werden.

Die sauberste Sitzungsverwaltung, die ich je gesehen habe, ist uNhAddins mit Castle Adapter, bei dem Sie sich nur um die Konfiguration den Rest programmieren Sie natürlich Ihr Repository und Ihren Service. Hier ist eine technische Referenz: Teil 1 , Teil 2 , Teil 3 , Teil 4 .

Mein Lieblingsbeispiel ist diese Aber im Zusammenhang mit WPF sollten Sie einen Blick werfen auf diese .

Ich hoffe, das hilft.

0voto

Caleb Vear Punkte 2597

Das Problem besteht darin, dass die Bindung erwartet, dass der Absender des Eigenschaftsänderungsereignisses das Proxy-Objekt ist, es sich aber in Wirklichkeit um das Zielobjekt des Proxys handelt. Dies führt dazu, dass die Bindung das Ereignis ignoriert.

Ich hatte das gleiche Problem, und ich habe es behoben, indem ich einen neuen NHibernate-Proxy implementiert habe, der Abonnements für das PropertyChanged-Ereignis abfängt und sie für sein eigenes Ereignis abonniert. Wenn dann das Ziel das Ereignis auslöst, wird es an die Proxy-Abonnenten weitergegeben, aber der Absender wird durch den Proxy ersetzt.

Ich habe hier einen Blogbeitrag darüber geschrieben: http://calebvear.blogspot.com/2011/04/wpf-bindings-not-updating-when.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X