2009-05-12 15 views
7

Myślę, że jest to łatwe pytanie, ale moje podejście do google jest słabe.NHibernate: Znaczenie przechwytywaczy zwraca wartość

miałem problem opisany w związku z następującym zakresie generowanego identyfikatora i kaskadowych:

https://www.hibernate.org/hib_docs/nhibernate/html/example-parentchild.html (w kierunku od dołu)

że stały się za pomocą ich Proponowana metoda z Syfon. Wszystko wydaje się działać, więc jestem szczęśliwy.

To powiedziawszy, nie mam pojęcia, co znaczenie wartości zwracanej jest od metod, takich jak:

public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnLoad(); 
     return false; 
    } 

    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types) 
    { 
     if (entity is Persistent) ((Persistent)entity).OnSave(); 
     return false; 
    } 

w obu przypadkach zwracane jest fałszywe.

Kiedy robię Google'a na temat NHibernate Interceptors, widzę mnóstwo przykładów, jak je napisać. Niektóre zamiast zwracają true (http://www.lostechies.com/blogs/rhouston/archive/2008/03/27/creating-a-timestamp-interceptor-in-nhibernate.aspx). Nie mam pojęcia, jaka jest różnica. Mój kod działa, ale Interceptory wydają mi się przydatne, więc chciałbym mieć lepsze zrozumienie.

+1

Przy okazji przechwytywacz jest przerywany i zastępuje go systemem zdarzeń. Niestety, system zdarzeń jest jeszcze mniej udokumentowany. Ale nadal powinieneś znaleźć jakąś przydatną dokumentację. –

Odpowiedz

5

Wierzę, że zwracana wartość powinna wskazywać, czy parametr stanu został zmieniony w metodzie przechwytywania. Masz rację - obecnie trudno jest google - witryna NHibernate przeniosła się niedawno, a Google nie znajduje tak dużo przydatnych informacji jak kiedyś.

+0

Czy można zatem powiedzieć, że zwracasz wartość true, jeśli zmieniłeś stan, a false, jeśli nie zrobiłeś tego? –

0

Huey,

Przeczytaj ten artykuł, nie jestem programista .net, ale ten post jest bardzo przydatne:

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11/1nr4enxv3dpeq/14#

Rozdział 11. Interceptors i wydarzenia To jest często przydatne dla aplikacji do reagować na pewne zdarzenia, które występują wewnątrz NHibernate. Pozwala to na implementację pewnych rodzajów ogólnej funkcjonalności i rozszerzenia funkcji NHibernate.

11.1. Interceptory Interfejs IInterceptora zapewnia wywołania zwrotne od sesji do aplikacji umożliwiającej aplikację do sprawdzenia i/lub zmieniania właściwości trwałego obiektu przed utrwaleniem, zaktualizowaniem, usunięciem lub załadowaniem. Jednym z możliwych zastosowań jest śledzenie informacji audytu. Na przykład: następujący po IInterceptorze automatycznie ustawia tag createTimestamp po utworzeniu IAuditable i aktualizuje właściwość lastUpdateTimestamp po zaktualizowaniu IAuditable.

Mam nadzieję, że oświeci Cię jeszcze bardziej.

+1

Rzeczywiście przeczytałem to wcześniej, ale może potrzebuję przeczytać więcej między wierszami. W podanym przykładzie, wygląda na to, że zwraca wartość true, jeśli modyfikuje encję, a false, jeśli nie. Może to wszystko, co do tego należy.Sądzę, że powinienem był przyjrzeć się bliżej kodowi i nie oczekiwać instrukcji "return value means (blank)". – anonymous

+0

- jest to stary wpis, ale na wszelki wypadek, gdy ktoś uzna to za przydatne - musiałem zmodyfikować wartość zwracaną w przechwytywaczu, aby zwrócić True, jeśli IsSaved ma wartość false, co spowoduje, że NH zapisze instancję jako nową (z insertem). – TheMar