NHibernate - Operaciones CRUD básicas

En este capítulo, cubriremos los aspectos básicos CRUD operations. Ahora que nuestro sistema está listo para comenzar, ya que hemos implementado con éxito nuestro dominio clase Student, también hemos definido los archivos de mapeo y configurado NHibernate. Ahora podemos usar algunas consultas para realizar operaciones CRUD.

Crear datos

Como puede ver, no tenemos datos en nuestra tabla de Estudiantes en NHibernateDemoDB base de datos.

Entonces, para agregar algunos datos, necesitamos realizar el Add/Create operación como se muestra a continuación.

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(); 
}

Como puede ver, hemos creado dos estudiantes y luego llamamos al método Save () del OpenSession y luego llame al Commit () del BeginTransaction. Aquí está la implementación completa enProgram.cs archivo

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(); 
         } 
      } 
   } 
}

Ahora ejecutemos esta aplicación y luego vayamos al Explorador de objetos de SQL Server y actualice su base de datos. Verá que los dos estudiantes anteriores ahora se agregan a la tabla Student en la base de datos NHibernateDemoDB.

Leer datos de la tabla de estudiantes

Puede ver que ahora tenemos dos registros en nuestra tabla de estudiantes. Para leer estos registros de la tabla, necesitamos llamar alCreateCriteria() de OpenSession como se muestra en el siguiente código.

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(); 
}

Entonces, si desea la lista de registros, simplemente podemos decir lista de tipo Estudiante.

Ahora usa el foreach a través de todos los estudiantes y diga imprimir la identificación, FirstMidName y LastNameen la consola. Ahora, ejecutemos esta aplicación nuevamente y verá el siguiente resultado en la ventana de la consola.

1 Allan Bommer
2 Jerry Lewis

También puede recuperar cualquier registro especificando el ID en el Get() método de OpenSession utilizando el siguiente código.

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(); 
}

Ahora, cuando ejecute su aplicación, verá el siguiente resultado.

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

Actualizar registro

Para actualizar el registro en la tabla, primero debemos buscar ese registro en particular y luego actualizar ese registro llamando al Update() método de OpenSession como se muestra en el siguiente código.

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();
}

Ahora, cuando ejecute su aplicación, verá el siguiente resultado.

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

Como puede ver, LastName of ID igual a 1 se actualiza de Bommer a Donald.

Eliminar el registro

Para eliminar cualquier registro de la tabla, primero debemos buscar ese registro en particular y luego eliminar ese registro llamando al Delete() método de OpenSession como se muestra en el siguiente código.

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(); 
}

Ahora, cuando ejecute su aplicación, verá el siguiente resultado.

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

Como puede ver, el registro que tiene ID igual a 1 ya no está disponible en la base de datos. También puede ver la base de datos en el Explorador de objetos de SQL Server.