2009-07-19 10 views

Odpowiedz

67

Rozdział 9 obejmuje to wszystko lepiej niż ja:

http://nhibernate.info/doc/nh/en/index.html

jednak urwiska Uwagi:

Save() trwa nowy obiekt bez identyfikatora i przywiązuje go do sesji. Obiekt będzie INSERT 'd.

Update() pobiera istniejący obiekt, który ma identyfikator, ale nie znajduje się w sesji i dołącza go do sesji. Obiekt będzie UPDATE "d.

SaveOrUpdate() sprawdza identyfikator i decyduje o tym, co jest konieczne.

SaveOrUpdateCopy() jest wyjątkowy w tym, że masz dwa obiekty o tym samym identyfikatorze - jeden w sesji i jeden nie. Jeśli spróbujesz i nie będziesz w sesji, wyjątek jest generowany normalnie (próbujesz teraz dołączyć do sesji dwa obiekty reprezentujące ten sam trwały obiekt). SaveOrUpdateCopy() kopiuje stan obiektu poza sesją do stanu obiektu sesji.

Nie jestem pewien, w jaki sposób zamierzasz korzystać z NH, ale w wielu przypadkach wszystko, czego potrzebujesz, to Save(). Sesja wykonuje WSZYSTKIE prace niezbędne do uzyskania informacji, co należy zaktualizować, a po prostu Flush() lub Commit() robi wszystko, czego potrzebujesz.

+2

Zwykle nie potrzebujesz funkcji SaveOrUpdate(), ponieważ ścieżki NHibernate zmieniają się w każdym załadowanym obiekcie. Aby zaktualizować obiekt, użyj Session.Get(), zmodyfikuj, a następnie wywołaj Session.Flush(). –

+0

Co jest bardziej czytelne, czy intencja ujawniająca się w kodzie, a następnie: 'SaveOrUpdate()' lub 'Flush()'/'Commit()'? Czy to nie robi różnicy (semantycznej czy innej)? –

+0

Jawnie opróżnianie sesji prawdopodobnie nie jest konieczne. Jeśli dokonasz transakcji lub sesja wykracza poza zakres/zostanie usunięta, zmiany będą automatycznie zachowywane (lub wcześniej, jeśli muszą z jakiegoś powodu, generowanie identyfikatora lub podobne). Flush to zamiar - ujawniający (dla mnie), kiedy * potrzebujesz *, aby wymusić zmiany automatycznie, z powodu read-ioslacji lub jakiejś innej ezoteryki, i po prostu hałasu w przeciwnym razie. Każdy, kto jest zaznajomiony z NH, zrozumie również ukrytą "Aktualizację" dla dołączonych encji, więc myślę tak samo o wyraźnych instrukcjach 'SaveOrUpdate'. –