Pour garder mes tests d'intégration indépendant, j'ai enlever toutes les anciennes données et insérer de nouvelles données de test avant chaque test. Est-il une meilleure façon de le faire plus simplement à la recherche de toutes les entités et de les supprimer un par un?
J'ai envisagé d'écrire une procédure stockée qui s'exécute "delete from nom_table;" pour chaque table qui doit être effacé. Qui devrait un peu plus rapide, mais il serait bien de le faire sans faire des requêtes SQL ou en appelant le SPs via NH.
Je suis l'aide de vanille NHibernate et Linq to NHibernate. Je crois Château Active Record a quelque chose comme Toto.DeleteAll(), mais je ne veux pas Active Record pour ce projet.
Des idées?
Merci /Erik
Mise à JOUR:
Depuis que cette question a été posée et répondue, des progrès ont été accomplis par le NHibernate de l'équipe. Comme Ayende explique dans ce billet de blog, vous pouvez maintenant exécuter des requêtes DML directement, sans NHibernate avoir à l'extraction des entités.
Pour supprimer tous les Foo objets que vous pourriez faire comme ceci:
using (ISession session = ...)
using (ITransaction transaction = session.BeginTransaction())
{
session.CreateQuery("delete Foo f").ExecuteUpdate();
transaction.Commit();
}
Cette requête devrait générer le code SQL suivant:
delete from Foo
qui promet d'être nettement plus rapide que d'aller chercher les entités d'abord et ensuite de les supprimer. Attention tout de même, puisque les requêtes comme elles n'affectent pas le niveau 1 de cache.