NHibernate - Hibernasi Lancar

Dalam bab ini, kami akan membahas NHibernate yang lancar. Fluent NHibernate adalah cara lain untuk memetakan atau Anda bisa menyebutnya sebagai alternatif dari file pemetaan XML standar NHibernate. Alih-alih menulis XML(.hbm.xml files)dokumen. Dengan bantuan Fluent NHibernate, Anda dapat menulis pemetaan dalam kode C # yang diketik dengan kuat.

  • Dalam pemetaan Fluent NHibernate dikompilasi bersama dengan aplikasi Anda lainnya.

  • Anda dapat dengan mudah mengubah pemetaan seperti kode aplikasi Anda dan kompilator akan gagal jika salah ketik.

  • Ini memiliki sistem konfigurasi konvensional, di mana Anda dapat menentukan pola untuk mengganti konvensi penamaan dan banyak hal lainnya.

  • Anda juga dapat mengatur bagaimana sesuatu harus diberi nama satu kali, kemudian Fluent NHibernate mengerjakan sisanya.

Mari kita lihat contoh sederhana dengan membuat proyek konsol baru. Dalam bab ini, kita akan menggunakan database sederhana di mana kita memiliki tabel Pelanggan sederhana seperti yang ditunjukkan pada gambar berikut.

Pasang Fluent NHibernate

Langkah pertama untuk memulai Fluent NHibernate adalah menginstal paket Fluent NHibernate. Jadi bukaNuGet Package Manager Console dan masukkan perintah berikut.

PM> install-package FluentNHibernate

Setelah berhasil diinstal, Anda akan melihat pesan berikut.

Mari tambahkan kelas model sederhana dari Pelanggan dan program berikut menunjukkan implementasi kelas Pelanggan.

using System; 
using System.Collections.Generic; 
using System.Linq;
using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class Customer { 
      public virtual int Id { get; set; } 
      public virtual string FirstName { get; set; } 
      public virtual string LastName { get; set; } 
   } 
}

Sekarang kita perlu membuat Pemetaan menggunakan NHibernate yang lancar, jadi tambahkan satu kelas lagi CustomerMapdalam proyek Anda. Berikut adalah implementasi kelas CustomerMap.

using FluentNHibernate.Mapping; 
using System; 
using System.Collections.Generic; 
using System.Linq; using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class CustomerMap : ClassMap<Customer> { 
      public CustomerMap() { 
         Id(x => x.Id); 
         Map(x => x.FirstName); 
         Map(x => x.LastName); 
         Table("Customer"); 
      } 
   }
}

Mari tambahkan kelas lain NHibernateHelper di mana kami akan mengatur pengaturan konfigurasi yang berbeda.

using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using NHibernate; 
using NHibernate.Tool.hbm2ddl;

namespace FluentNHibernateDemo { 

   public class NHibernateHelper { 
	
      private static ISessionFactory _sessionFactory;
		
      private static ISessionFactory SessionFactory { 
         get { 
            if (_sessionFactory == null)
            InitializeSessionFactory(); return _sessionFactory; 
         } 
      }
   
      private static void InitializeSessionFactory() { 
         _sessionFactory = Fluently.Configure() 
			
         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;
			
         .Database(MsSqlConfiguration.MsSql2008 .ConnectionString( 
            @"Data Source + Initial Catalog + Integrated Security + Connect Timeout
            + Encrypt + TrustServerCertificate + ApplicationIntent + 
            MultiSubnetFailover") .ShowSql() ) 
				
         .Mappings(m => m.FluentMappings
         .AddFromAssemblyOf<Program>()) 
         .ExposeConfiguration(cfg => new SchemaExport(cfg) 
         .Create(true, true)) 
         .BuildSessionFactory(); 
      }
		
      public static ISession OpenSession() { 
         return SessionFactory.OpenSession(); 
      } 
   }
}

Sekarang mari beralih ke Program.cs file di mana kita akan memulai sesi dan kemudian membuat pelanggan baru dan menyimpan pelanggan itu ke database seperti yang ditunjukkan di bawah ini.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class Program { 
	
      static void Main(string[] args) { 
		
         using (var session = NHibernateHelper.OpenSession()) { 
			
            using (var transaction = session.BeginTransaction()) { 
               var customer = new Customer { 
                  FirstName = "Allan", 
                  LastName = "Bomer" 
               }; 
					
               session.Save(customer); 
               transaction.Commit();
               Console.WriteLine("Customer Created: " + customer.FirstName + "\t" +
                  customer.LastName); 
            } 
				
            Console.ReadKey(); 
         } 
      } 
   } 
}

Mari jalankan aplikasi Anda dan Anda akan melihat output berikut.

if exists (select * from dbo.sysobjects where id = object_id(N'Customer') and
   OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Customer

create table Customer (
   Id INT IDENTITY NOT NULL,
   FirstName NVARCHAR(255) null,
   LastName NVARCHAR(255) null,
   primary key (Id)
)

NHibernate: INSERT INTO Customer (FirstName, LastName) VALUES (@p0, @p1); 
   select SCOPE_IDENTITY();@p0 = 'Allan' [Type: String (4000)], 
   @p1 = 'Bomer' [Type: String (4000)]
   Customer Created: Allan Bomer

Seperti yang Anda lihat, pelanggan baru dibuat. Untuk melihat catatan pelanggan, mari pergi ke database dan lihat Lihat Data dan Anda akan melihat bahwa 1 Pelanggan ditambahkan.