NHibernate - Akıcı Hazırda Beklet

Bu bölümde, akıcı NHibernate'i ele alacağız. Fluent NHibernate, haritalamanın başka bir yoludur veya NHibernate'in standart XML eşleme dosyalarına bir alternatif olduğunu söyleyebilirsiniz. XML yazmak yerine(.hbm.xml files)belgeler. Fluent NHibernate'in yardımıyla, güçlü yazılmış C # koduyla eşlemeler yazabilirsiniz.

  • Fluent NHibernate'de eşlemeler, uygulamanızın geri kalanıyla birlikte derlenir.

  • Eşleştirmelerinizi tıpkı uygulama kodunuz gibi kolayca değiştirebilirsiniz ve derleyici herhangi bir yazım hatasında başarısız olur.

  • Adlandırma kurallarını ve diğer birçok şeyi geçersiz kılmak için kalıplar belirleyebileceğiniz geleneksel bir yapılandırma sistemine sahiptir.

  • Nesnelerin nasıl adlandırılacağını da ayarlayabilirsiniz, ardından gerisini Fluent NHibernate halleder.

Yeni bir konsol projesi oluşturarak basit bir örneğe bakalım. Bu bölümde, aşağıdaki resimde gösterildiği gibi basit bir Müşteri tablosuna sahip olduğumuz basit bir veritabanı kullanacağız.

Fluent NHibernate'i kurun

İlk adım, Fluent NHibernate'i başlatmak, Fluent NHibernate paketini kurmaktır. Öyleyse açNuGet Package Manager Console ve aşağıdaki komutu girin.

PM> install-package FluentNHibernate

Başarıyla kurulduktan sonra aşağıdaki mesajı göreceksiniz.

Basit bir Customer model sınıfı ekleyelim ve aşağıdaki program Müşteri sınıfı uygulamasını gösterir.

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

Şimdi akıcı NHibernate kullanarak Mappings oluşturmamız gerekiyor, bu yüzden bir sınıf daha ekleyin CustomerMapprojenizde. CustomerMap sınıfının uygulaması burada.

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

Başka bir sınıf ekleyelim NHibernateHelper içinde farklı yapılandırma ayarları belirleyeceğiz.

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

Şimdi şuraya geçelim Program.cs bir oturum başlatacağımız ve ardından yeni bir müşteri oluşturacağımız ve bu müşteriyi aşağıda gösterildiği gibi veritabanına kaydedeceğimiz dosya.

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

Uygulamanızı çalıştıralım ve aşağıdaki çıktıyı göreceksiniz.

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

Gördüğünüz gibi yeni müşteri yaratıldı. Müşteri kaydını görmek için veritabanına gidip Verileri Görüntüle'yi görelim ve 1 Müşteri eklendiğini göreceksiniz.