NHibernate - Opérations CRUD de base

Dans ce chapitre, nous couvrirons les bases CRUD operations. Maintenant que notre système est prêt à démarrer, comme nous avons implémenté avec succès notre classe de domaine Student, nous avons également défini les fichiers de mappage et configuré NHibernate. Nous pouvons maintenant utiliser certaines requêtes pour effectuer des opérations CRUD.

Créer des données

Comme vous pouvez le voir, nous n'avons pas de données dans notre table Student en NHibernateDemoDB base de données.

Donc, pour ajouter des données, nous devons effectuer le Add/Create fonctionnement comme indiqué ci-dessous.

using (var session = sefact.OpenSession()) { 

   using (var tx = session.BeginTransaction()) { 
     
      var student1 = new Student { 
         ID = 1, 
         FirstMidName = "Allan", 
         LastName = "Bommer" 
      }; 
      
      var student2 = new Student { 
         ID = 2, 
         FirstMidName = "Jerry", 
         LastName = "Lewis" 
      }; 
      
      session.Save(student1); 
      session.Save(student2); 
      tx.Commit(); 
   } 
   
   Console.ReadLine(); 
}

Comme vous pouvez le voir, nous avons créé deux étudiants, puis appelons la méthode Save () du OpenSession puis appelez le Commit () du BeginTransaction. Voici l'implémentation complète dansProgram.cs fichier

using NHibernate.Cfg; 
using NHibernate.Dialect; 
using NHibernate.Driver; 

using System; 
using System.Linq; 
using System.Reflection;

namespace NHibernateDemoApp { 
   
   class Program { 
      
      static void Main(string[] args) { 
         var cfg = new Configuration();
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;
			
         cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + 
            Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
            TrustServerCertificate + ApplicationIntent + MultiSubnetFailover"; 

            x.Driver<SqlClientDriver>(); 
            x.Dialect<MsSql2008Dialect>(); 
         }); 
   
         cfg.AddAssembly(Assembly.GetExecutingAssembly()); 
         var sefact = cfg.BuildSessionFactory(); 
			
         using (var session = sefact.OpenSession()) { 
			
            using (var tx = session.BeginTransaction()) { 
               
               var student1 = new Student { 
                  ID = 1,  
                  FirstMidName = "Allan", 
                  LastName = "Bommer" 
               }; 

               var student2 = new Student { 
                  ID = 2, 
                  FirstMidName = "Jerry", 
                  LastName = "Lewis" 
               }; 
            
               session.Save(student1); 
               session.Save(student2); 
               tx.Commit();
            } 
            
            Console.ReadLine(); 
         } 
      } 
   } 
}

Maintenant, exécutons cette application, puis allons dans l'explorateur d'objets SQL Server et actualisons votre base de données. Vous verrez que les deux étudiants ci-dessus sont maintenant ajoutés à la table Student dans la base de données NHibernateDemoDB.

Lire les données de la table des étudiants

Vous pouvez voir que nous avons maintenant deux enregistrements dans notre table des étudiants. Pour lire ces enregistrements à partir de la table, nous devons appeler leCreateCriteria() d'OpenSession comme indiqué dans le code suivant.

using (var session = sefact.OpenSession()) { 
   
   using (var tx = session.BeginTransaction()) { 
      var students = session.CreateCriteria<Student>().List<Student>(); 
      
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", 
            student.ID,student.FirstMidName, student.LastName); 
      } 
      
      tx.Commit(); 
   } 
   
   Console.ReadLine(); 
}

Donc, si vous voulez la liste des enregistrements, nous pouvons simplement dire liste de type Student.

Maintenant, utilisez le foreach à travers tous les élèves et dites imprimer la pièce d'identité, FirstMidName et LastNamesur la console. Maintenant, exécutons à nouveau cette application et vous verrez la sortie suivante dans la fenêtre de la console.

1 Allan Bommer
2 Jerry Lewis

Vous pouvez également récupérer n'importe quel enregistrement en spécifiant l'ID dans le Get() méthode d'OpenSession à l'aide du code suivant.

using (var session = sefact.OpenSession()) { 
   
   using (var tx = session.BeginTransaction()) { 
      var students = session.CreateCriteria<Student>().List<Student>(); 
      
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", student.ID, 
            student.FirstMidName, student.LastName); 
      }
      
      var stdnt = session.Get<Student>(1); 
      Console.WriteLine("Retrieved by ID"); 
      Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID, 
         stdnt.FirstMidName, stdnt.LastName); 
      tx.Commit();
   } 
	
   Console.ReadLine(); 
}

Maintenant, lorsque vous exécutez votre application, vous verrez la sortie suivante.

1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer

Mettre à jour l'enregistrement

Pour mettre à jour l'enregistrement dans la table, nous devons d'abord récupérer cet enregistrement particulier, puis mettre à jour cet enregistrement en appelant le Update() méthode d'OpenSession comme indiqué dans le code suivant.

using (var session = sefact.OpenSession()) { 

   using (var tx = session.BeginTransaction()) { 
      var students = session.CreateCriteria<Student>().List<Student>(); 
     
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", student.ID, 
            student.FirstMidName, student.LastName); 
      }
      
      var stdnt = session.Get<Student>(1); 
      Console.WriteLine("Retrieved by ID"); 
      Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID, stdnt.FirstMidName, stdnt.LastName);
      
      Console.WriteLine("Update the last name of ID = {0}", stdnt.ID); 
      stdnt.LastName = "Donald"; 
      session.Update(stdnt); 
      Console.WriteLine("\nFetch the complete list again\n"); 
      
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", student.ID, 
            student.FirstMidName, student.LastName); 
      } 
      
      tx.Commit();
   } 
   
   Console.ReadLine();
}

Maintenant, lorsque vous exécutez votre application, vous verrez la sortie suivante.

1 Allan Bommer
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Update the last name of ID = 1
Fetch the complete list again
1 Allan Donald
2 Jerry Lewis

Comme vous pouvez le voir, LastName d'ID égal à 1 est mis à jour de Bommer à Donald.

Supprimer l'enregistrement

Pour supprimer un enregistrement de la table, nous devons d'abord récupérer cet enregistrement particulier, puis supprimer cet enregistrement en appelant le Delete() méthode d'OpenSession comme indiqué dans le code suivant.

using (var session = sefact.OpenSession()) { 
   
   using (var tx = session.BeginTransaction()) { 
      var students = session.CreateCriteria<Student>().List<Student>();
      
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", student.ID, 
            student.FirstMidName, student.LastName); 
      }
      
      var stdnt = session.Get<Student>(1); 
      Console.WriteLine("Retrieved by ID"); 
      Console.WriteLine("{0} \t{1} \t{2}", stdnt.ID, stdnt.FirstMidName, stdnt.LastName);
      
      Console.WriteLine("Delete the record which has ID = {0}", stdnt.ID); 
      session.Delete(stdnt);
      Console.WriteLine("\nFetch the complete list again\n"); 
      
      foreach (var student in students) { 
         Console.WriteLine("{0} \t{1} \t{2}", student.ID, student.FirstMidName, 
            student.LastName); 
      } 
      
      tx.Commit();
   } 
	
   Console.ReadLine(); 
}

Maintenant, lorsque vous exécutez votre application, vous verrez la sortie suivante.

1 Allan Donald
2 Jerry Lewis
Retrieved by ID
1 Allan Bommer
Delete the record which has ID = 1
Fetch the complete list again
2 Jerry Lewis

Comme vous pouvez le voir, l'enregistrement dont l'ID est égal à 1 n'est plus disponible dans la base de données. Vous pouvez également voir la base de données dans l'explorateur d'objets SQL Server.