Considérant les blocs de code suivants, pourquoi l'appel à HQL fonctionne-t-il mais l'appel à delete() ne fonctionne pas? En arrière-plan, j'utilise le pilote NHibernate sur IBM.Data.DB2.Iseries. Venez découvrir, la journalisation sur l'AS400 est désactivée, donc je ne peux pas utiliser les transactions. Je ne suis pas l'administrateur AS400 ou ne sais rien à ce sujet, donc je ne sais pas si la journalisation désactivée (pas l'ouverture des transactions) est à l'origine de ce problème ou non. Dois-je absolument avoir la possibilité d'ouvrir des transactions si j'appelle Delete() ou d'autres fonctions de NHibernate?NHibernate - Pourquoi l'appel à Delete() échoue-t-il à supprimer mais à supprimer via HQL?
//This Does not work - no error and no deletes
public static void Delete(Object Entity)
{
using (ISession session = _sessionFactory.OpenSession())
{
//using(ITransaction tx = session.BeginTransaction())
//{
session.Delete(Entity);
//tx.Commit();
session.Close();
//}
}
}
//This does work
public static void Delete(Object Entity)
{
using (ISession session = _sessionFactory.OpenSession())
{
//commented out transaction control because throws error because
//journaling is not turned on the AS400
//using(ITransaction tx = session.BeginTransaction())
//{
session.CreateQuery("delete MyDAO p where p.MyDAOID = :MyDAOID").SetString("MyDAOID", ((MyDAO)Entity).MyDAOID.ToString()).ExecuteUpdate();
//}
}
}
Avez-vous une exception et quel est le message? Si vous ne recevez pas d'exception, quel sql sera généré par session.delete? – Paco
Paco, je ne reçois pas d'exception et aucune requête de suppression n'est générée. S'il vous plaît voir mon autre réponse à ce poste (j'ai posté après avoir vu votre commentaire). Si j'appelle la fonction Get pour extraire l'objet dans une session, puis lui dire de le supprimer dans cette session, il génère alors la requête Delete. –
Alors, pourquoi je ne reçois pas d'exception? J'apprends cela, parce que j'ai demandé une liste d'objets dans une session puis que je l'ai fermée, et que j'essaie de supprimer l'objet d'une session différente, ça ne fonctionne pas - parce que je ne le trouve pas dans la même unité de travail. Cependant, ne devrait-il pas être assez gentil à lancer et exception donc je sais que mon objet n'a pas supprimé? –