2009-03-24 7 views
9

Ich habe keinen Zugriff auf den Code hier vor mir, also habe ich mich nur gefragt, ob mir jemand mit Session.Evict() helfen könnte.NHibernate Session.Evict()

Angenommen, ich habe ein Person-Objekt mit einer Kindsammlung von Adressen. Ich fülle das Person-Objekt aus einer Sitzung und lade die Addresses-Sammlung. Ich rufe dann Session.Evict (personObject) auf, um das Person-Objekt von der Sitzung zu trennen. Meine Frage ist, wenn ich versuche, auf die Adressen-Sammlung zuzugreifen, wird es nur null zurückgeben, oder werde ich eine Ausnahme erhalten, weil der NHibernate-Proxys die verbundene Sitzung nicht finden kann?

Antwort

18

Wenn Sie verursachen, dass die Lazy Load ausgeführt wird, bevor Sie die Entity entfernen, wird die Auflistung auch nach der Räumung zugänglich sein. Wenn Sie jedoch die Entity entfernen und dann versuchen, die untergeordnete Sammlung zu laden, erhalten Sie eine Ausnahme.

+0

+1 Genau dasselbe Szenario ist heute beim Komponententest aufgetreten –

0

Ich habe auch keinen Code vor mir, aber aus dem Speicher wirst du wahrscheinlich eine Ausnahme bekommen.

Wenn Sie Lazy laden und arbeiten, versucht NHibernate, die Adressen-Sammlung zu laden. Es sollte nie einen falschen Wert/eine falsche Sammlung zurückgeben, es wird sich nur beschweren, wenn es nicht laden kann, was gefragt wurde.

+0

das macht Sinn ... wenn ich eine Chance bekomme, werde ich es ausprobieren. Danke für die Antwort – lomaxx

6

Sie erhalten eine NHibernate.LazyInitializationException.