2010-04-20 6 views

Antwort

11

Castle kann verwendet werden (unter anderem haben Sie die Wahl, können Sie auch LinFu, Spring.NET, ...) verwenden, um dynamische Proxies Ihrer Entitäten zu erstellen.

Standardmäßig verwendet NHibernate dynamische Proxys zur Darstellung Ihrer Entitäten. Auf diese Weise kann ein Objekt an Sie zurückgegeben werden, wenn Sie eine Entität aus der DB abrufen, ohne dass alle Eigenschaften aufgefüllt sind. Wenn Sie einen dynamischen Proxy verwenden, füllt er nur die Entität, wenn Sie wirklich auf eine Eigenschaft verweisen.
(Es ist also eine Art von Lazy Loading; nicht zu verwechseln mit Lazy Loading von Sammlungen/Assoziationen obwohl).

Dieses Verhalten ist der Grund, warum NHibernate möchte, dass Sie jede Eigenschaft standardmäßig als virtuell erstellen: NHibernate erstellt eine neue Klasse, die diesen Castle (oder LinFu, ...) Proxy-Provider verwendet, der von Ihrer Entität erbt überschreiben Sie alle Eigenschaften, damit der Code, der zum Abrufen der erforderlichen Daten aus der Datenbank erforderlich ist, "injiziert" werden kann.

Sie können dieses Verhalten deaktivieren, indem Sie in Ihrer Entitätszuordnung 'lazy = false' angeben. (Obwohl ich denke, dass NHibernate auch dann, wenn Sie diese Funktion deaktivieren, weiterhin einen der Proxyfactorys verwenden muss).

3

Wenn Sie eine Entität von ISession auswählen, erhalten Sie keine echte Entitätsinstanz - Sie erhalten ein Proxy-Objekt. Dieses Proxy-Objekt erbt Ihre Entität und wird von NHibernate verwendet, um an den Feldern vorgenommene Änderungen zu verfolgen.

Verwandte Themen