2017-09-16 10 views
0

J'ai une table (InquiryTable) et tout d'abord je sélectionne quelques enregistrements, après avoir extrait ces enregistrements de la base de données, je les mets à jour dans la base de données. mais j'ai besoin de savoir comment je peux faire ces deux commandes simultanément (les fusionner en un) par nhibernate.mettre à jour des enregistrements avec des conditions spéciales nhibernate

inquiry = Session.Query<InquiryTable>().Where((c => c.ID == ID)).ToList();  
inquiry.FirstOrDefault().Time= sendTime; 
Session.Update(inquiry); 

Je souhaite fusionner Session.Query et Session.Update en une seule commande. Cela signifie que j'ai besoin d'une mise à jour avec où dans la même requête.

Répondre

0

Ce qui correspondrait à ce concept est NHiberante DML

13.3. DML-style operations

Comme déjà discuté, objet automatique et/relationnel transparent mapping concerne la gestion de l'état d'objet. Cela implique que l'état de l'objet est disponible en mémoire, donc manipuler (en utilisant les instructions SQL Data Manipulation Language (DML): INSERT, UPDATE, DELETE) directement dans la base de données n'affecte pas l'état en mémoire. Cependant, NHibernate fournit des méthodes d'exécution d'instructions DML SQL de style qui sont exécutées via le langage HQL (Hibernate Query Language) .

Ce jeu de fonctionnalités est pas construit au-dessus de ICriteria ou QueryOver, mais il n'utilise HQL.

Un exemple de la doc, faisant UPDATE sur des données filtrées en un seul coup:

string hqlUpdate = "update Customer c set c.name = :newName where c.name = :oldName"; 
// or string hqlUpdate = "update Customer set name = :newName where name = :oldName"; 
int updatedEntities = s.CreateQuery(hqlUpdate) 
     .SetString("newName", newName) 
     .SetString("oldName", oldName) 
     .ExecuteUpdate(); 

Voir aussi: