2009-07-19 16 views

Répondre

67

Chapitre 9 couvre tout cela mieux que moi:

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

Mais notes falaise:

Save() prend un nouvel objet sans identifiant et qu'il attache à la session. L'objet sera INSERT 'd.

Update() prend un objet existant qui a un identificateur mais n'est pas dans la session et l'attache à la session. L'objet sera UPDATE 'd.

SaveOrUpdate() examine l'identificateur et décide de ce qui est nécessaire dans ce qui précède.

SaveOrUpdateCopy() est spécial en ce sens que vous avez deux objets avec le même identifiant - un dans la session et un non. Si vous essayez et update celui qui n'est pas dans la session une exception est levée normalement (vous essayez maintenant d'attacher deux objets qui représentent le même objet persistant à la session). SaveOrUpdateCopy() copie l'état de l'objet hors session dans l'état de l'objet de session. Je ne sais pas comment vous allez utiliser NH, mais pour beaucoup de cas tout ce dont vous avez besoin est Save(). La session fait tout le travail nécessaire pour savoir ce qui doit être mis à jour et simplement Flush() ou Commit() fait tout ce dont vous avez besoin.

+2

Vous n'avez généralement pas besoin de SaveOrUpdate() car NHibernate suit les modifications apportées à chaque objet chargé. Pour mettre à jour un objet, utilisez Session.Get(), faites-vous changer puis appelez Session.Flush(). –

+0

Qu'est-ce qui est plus lisible ou intention révélatrice dans le code alors: 'SaveOrUpdate()' ou 'Flush()'/'Commit()'? Ou cela ne fait-il pas une différence (sémantique ou autre)? –

+0

Le vidage explicite de votre session n'est probablement pas nécessaire. Si vous validez une transaction ou si la session est hors de portée/est éliminée, les modifications seront automatiquement conservées (ou plus tôt si elles doivent l'être pour une raison quelconque, la génération d'identifiants ou autre). Le flush est révélateur (pour moi) quand vous avez besoin de forcer les changements automatiquement, à cause de la lecture ou de quelque autre ésotérisme, et seulement du bruit. Quiconque est familier avec NH comprendra également la mise à jour implicite pour les entités attachées, donc j'ai tendance à penser la même chose des instructions explicites 'SaveOrUpdate'. –

Questions connexes