NHibernate - Hoạt động CRUD cơ bản

Trong chương này, chúng tôi sẽ đề cập đến những điều cơ bản CRUD operations. Bây giờ hệ thống của chúng tôi đã sẵn sàng để bắt đầu, vì chúng tôi đã triển khai thành công lớp Sinh viên miền của mình, chúng tôi cũng đã xác định các tệp ánh xạ và định cấu hình NHibernate. Bây giờ chúng ta có thể sử dụng một số truy vấn để thực hiện các hoạt động CRUD.

Tạo dữ liệu

Như bạn có thể thấy rằng chúng tôi không có dữ liệu nào trong bảng Sinh viên của chúng tôi trong NHibernateDemoDB cơ sở dữ liệu.

Vì vậy, để thêm một số dữ liệu, chúng ta cần thực hiện Add/Create hoạt động như hình dưới đây.

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

Như bạn có thể thấy rằng chúng tôi đã tạo hai sinh viên và sau đó gọi phương thức Save () của OpenSession và sau đó gọi Cam kết () của BeginTransaction. Đây là cách triển khai hoàn chỉnh trongProgram.cs tập tin

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

Bây giờ hãy chạy ứng dụng này và sau đó đi tới SQL Server Object Explorer và làm mới cơ sở dữ liệu của bạn. Bạn sẽ thấy rằng hai sinh viên trên hiện đã được thêm vào bảng Sinh viên trong cơ sở dữ liệu NHibernateDemoDB.

Đọc dữ liệu từ bảng sinh viên

Bạn có thể thấy rằng bây giờ chúng tôi có hai bản ghi trong bảng học sinh của chúng tôi. Để đọc các bản ghi này từ bảng, chúng ta cần gọiCreateCriteria() của OpenSession như được hiển thị trong đoạn mã sau.

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

Vì vậy, nếu bạn muốn danh sách bản ghi thì chúng ta có thể chỉ cần nói danh sách loại Sinh viên.

Bây giờ sử dụng foreach thông qua tất cả các sinh viên và nói in ID, FirstMidNameLastNametrên bảng điều khiển. Bây giờ, hãy chạy lại ứng dụng này và bạn sẽ thấy kết quả sau trên cửa sổ bảng điều khiển.

1 Allan Bommer
2 Jerry Lewis

Bạn cũng có thể truy xuất bất kỳ bản ghi nào bằng cách chỉ định ID trong Get() phương pháp của OpenSession bằng cách sử dụng mã sau.

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

Bây giờ khi bạn chạy ứng dụng của mình, bạn sẽ thấy kết quả sau.

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

Cập nhật bản ghi

Để cập nhật bản ghi trong bảng, trước tiên chúng ta cần tìm nạp bản ghi cụ thể đó và sau đó cập nhật bản ghi đó bằng cách gọi Update() phương thức của OpenSession như được hiển thị trong đoạn mã sau.

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

Bây giờ khi bạn chạy ứng dụng của mình, bạn sẽ thấy kết quả sau.

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

Như bạn có thể thấy, LastName của ID bằng 1 được cập nhật từ Bommer thành Donald.

Xóa hồ sơ

Để xóa bất kỳ bản ghi nào khỏi bảng, trước tiên chúng ta cần tìm nạp bản ghi cụ thể đó và sau đó xóa bản ghi đó bằng cách gọi Delete() phương thức của OpenSession như được hiển thị trong đoạn mã sau.

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

Bây giờ khi bạn chạy ứng dụng của mình, bạn sẽ thấy kết quả sau.

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

Như bạn có thể thấy rằng bản ghi có ID bằng 1 không còn có sẵn trong cơ sở dữ liệu. Bạn cũng có thể xem cơ sở dữ liệu trong SQL Server Object Explorer.