IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 28 Temmuz 2025

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - NHibernate C# Anasayfası

NHibernate, .NET çerçevesi ile kullanılmak üzere tasarlanmış güçlü bir Nesne İlişkisel Eşleme (ORM) çerçevesidir. Bu, geliştiricilere .NET uygulamalarının nesneye yönelik dünyası ile veritabanlarının ilişkisel dünyası arasındaki boşluğu verimli bir şekilde kapatma olanağı sağlar. NHibernate kullanarak, veri erişim katmanlarını uygulamak için gerekli olan gereksiz kod miktarını önemli ölçüde azaltabilirsiniz, bu da .NET uygulamalarınızı daha temiz ve daha bakımının yapılabilir kılar.

Veritabanı Etkileşimlerini Basitleştirmede ORM'nin Rolü

NHibernate gibi ORM çerçeveleri, geliştiricilerin verilerle SQL ifadeleri yerine nesneler ve özellikleri açısından çalışmasına izin verir. Bu soyutlama, geliştirme zamanlarını azaltarak temel iş mantığına yoğunlaşmayı sağlar ve SQL komutları ve veritabanı şeması konusunda dikkat gerektirmez. Örneğin, NHibernate, tüm SQL oluşturma ve yürütme işlemlerini, ekleme, silme ve güncelleme işlemleri gibi işlemleri basit nesne dönüştürmesi ve nesne manipülasyonu ile yapılmasını sağlar.

.NET Projesinde NHibernate Kurulumu

.NET projenizde NHibernate'e başlamak için ilk adım, NHibernate paketini kurmaktır. Bu, Visual Studio'nun NuGet Paket Yöneticisi aracılığıyla aşağıdaki komutu kullanarak kolayca yapılabilir:

PM > Install-Package NHibernate

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Bir komut satırı konsolu açın ve NHibernate yüklemek için yukarıdaki komutu girin

XML Yapılandırma Dosyasıyla NHibernate'i Yapılandırma

NHibernate kurulduktan sonra, bir sonraki adım onu yapılandırmaktır. Bu, veritabanı sunucu ayarlarınızı ve nesnelerinizin veritabanı tablolara eşleme ayrıntılarını içeren bir Hibernate eşleme dosyası oluşturmayı içerir. Ana XML dosyası, genellikle hibernate.cfg.xml olarak adlandırılır, veritabanı bağlantı dizesi, diyalekt ve diğer veritabanına özgü ayarları içerir.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">
      NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.SqlClientDriver
    </property>
    <property name="connection.connection_string">
      Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
    </property>
    <property name="dialect">
      NHibernate.Dialect.MsSql2012Dialect
    </property>
    <property name="show_sql">true</property>
    <mapping resource="Employee.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
XML

NHibernate'in Temel Bileşenlerini Anlama

NHibernate içindeki önemli bileşenlerden biri, fabrikasyon tasarım deseni kullanılarak tasarlanmış olan Oturum Fabrikası'dır. Bu bileşen, veritabanına bağlantıyı yönetir ve işlem operasyonlarını tutar. Oturum Fabrikası oluşturmak maliyetlidir, bu nedenle tipik olarak uygulama ömrü başına bir kez yapılır ve performans optimizasyonu için önemli bir unsur olarak kabul edilir.

NHibernate'teki Anahtar Sınıflar ve Metotlar

NHibernate, birkaç önemli sınıf ve metot etrafında döner. Örneğin, ISession arabirimi NHibernate'de temel bir rol oynar, veri sorgulama ve manipülasyon oturumlarının oluşturulmasını kolaylaştırır. OpenSession gibi yöntemler, geliştiricilerin işlemleri başlatmasına, SQL komutları gerçekleştirmesine ve ya SQL ifadeleri ya da NHibernate'in kendi HQL (Hibernate Query Language) dilini kullanarak veritabanını sorgulamasına yardımcı olur.

NHibernate ile Varlıkları Veritabanı Tablolarına Eşleme

NHibernate'de varlık eşlemesi, genellikle XML olarak yazılan eşleme dosyaları aracılığıyla gerçekleştirilir. Bu dosyalar, genellikle varlık sınıfının adını taşır (örneğin, Employee.hbm.xml) ve bir varlıkın özelliklerinin bir veritabanı tablosunun sütunlarına nasıl eşlendiğini tanımlar. Tipik bir eşleme dosyası, sınıf adı, tablo adı ve her bir özelliğin birincil anahtar, sütun adı ve veri türü gibi ayrıntılarını içerir.

Eşleme Dosyalarında Kullanılan Özellikler ve Nitelikler Üzerine Detaylı Bir Bakış

Bu eşleme dosyalarında, her özellik için not-null kısıtlamaları veya unique kısıtlamaları gibi çeşitli nitelikleri belirleyebilirsiniz. NHibernate ayrıca, nesneye yönelik bir çerçeve içinde ilişkisel veri yapısını temsil etmek için güçlü bir araç seti sağlayan çoktan çoğuna ve çoka çok gibi karmaşık eşlemelere izin verir.

NHibernate'te SQL Komutları ve İşlemleri Yürütme

NHibernate, kapsamlı SQL komutları altına işlevselliği basitleştiren CRUD (Create, Read, Update, Delete) işlemlerini basitleştirir. Geliştiriciler, bu işlemleri açık SQL kodu yazmadan, yerine ISession arabirimi tarafından sağlanan yöntemleri kullanarak gerçekleştirebilir. Örneğin, veritabanına yeni bir varlık eklemek için, sadece nesnenin yeni bir örneğini oluşturun, özelliklerini ayarlayın ve ISession'in Save yöntemini kullanın.

ITransaction ile İşlem Yönetimi

NHibernate'de işlemler ITransaction arabirimi üzerinden yönetilir, bu da veri bütünlüğü ve tutarlılığını sağlar. Geliştiriciler, ISession'ten BeginTransaction yöntemini kullanarak, işlemlerin başarılı bir şekilde tamamlandığından emin olabilir, eğer bir sorun çıkarsa veriyi geri çekebilir ve böylece verilerinizin kararlılığını sürdürebilir.

Tam Kod Örneği

Bu örnek, NHibernate yapılandırma ve eşleme dosyalarının kurulumunun yanı sıra NHibernate kullanarak oluşturma, okuma, güncelleme ve silme işlemlerinin nasıl gerçekleştirileceğini gösterir.

using NHibernate;
using NHibernate.Cfg;
using System;

// Define the Employee class with virtual properties
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

class Program
{
    private static ISessionFactory sessionFactory;

    static void Main()
    {
        // Initialize the SessionFactory using NHibernate configuration
        sessionFactory = new Configuration().Configure().BuildSessionFactory();

        // Perform database operations
        CreateEmployee();
        ReadEmployee(1);
        UpdateEmployee(1, "UpdatedName");
        DeleteEmployee(1);
    }

    static void CreateEmployee()
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            var newEmployee = new Employee
            {
                FirstName = "Iron",
                LastName = "Software"
            };
            session.Save(newEmployee); // Save the new Employee object to the database
            transaction.Commit(); // Commit the transaction to finalize the insertion
            Console.WriteLine("Employee created: " + newEmployee.Id);
        }
    }

    static void ReadEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        {
            // Retrieve the Employee object by its Id
            var employee = session.Get<Employee>(id);
            Console.WriteLine("Read Employee: " + employee.FirstName + " " + employee.LastName);
        }
    }

    static void UpdateEmployee(int id, string newFirstName)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            // Get the Employee object by its Id
            var employee = session.Get<Employee>(id);
            employee.FirstName = newFirstName; // Update the employee's first name
            session.Update(employee); // Update the Employee object in the database
            transaction.Commit(); // Commit the transaction to save changes
            Console.WriteLine("Employee updated: " + employee.FirstName);
        }
    }

    static void DeleteEmployee(int id)
    {
        using (var session = sessionFactory.OpenSession())
        using (var transaction = session.BeginTransaction())
        {
            // Retrieve the Employee object to be deleted
            var employee = session.Get<Employee>(id);
            session.Delete(employee); // Delete the Employee from the database
            transaction.Commit(); // Commit the transaction to finalize the deletion
            Console.WriteLine("Employee deleted");
        }
    }
}

NHibernate'in Veritabanı Taşınabilirliği ve Karşılıklı Çalışma Özellikleri

Veritabanı portatifliği NHibernate ile sağlanmıştır. Dil ekini takiben, NHibernate çoğu SQL veritabanına minimal kod değişiklikleri ile adapte olabilir. Bu da, verilerinizin erişim katmanını yeniden yazmak zorunda kalmadan bir SQL Sunucusundan MySQL veya Oracle'a geçmenizi sağlar.

SQL Sunucusu Gibi Çeşitli Veritabanı Sistemleri için NHibernate'i Uyarlama

NHibernate'deki XML yapılandırma dosyaları, geliştiricilerin, veritabanı sistemlerine özgü SQL dili ekini belirlemelerine olanak tanır. Bu NHibernate'i, SQL'i destekleyen neredeyse her ilişkisel veritabanı ile işleyen bir esnek çözüm yapar ve uygulamanızın farklı veritabanı sistemleri arasında taşınabilir olmasını sağlar.

IronPDF ile NHibernate Kullanımı

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronPDF Anasayfası

IronPDF ile NHibernate entegrasyonu, .NET uygulamalarınızı geliştirebilen güçlü bir kombinasyondur. Bu, NHibernate ile veritabanı işlemlerini yönetmenizi sağlarken, IronPDF'den veri PDF belgeleri üretmek için faydalanmanıza olanak tanır. Uygulamanızın kullanıcıya özgü belgeler sunması gerektiği bir senaryoyu düşünün, bunlar PDF formatında oluşturulmalı ve indirilmelidir. NHibernate, veritabanlarınızdaki veri alma işlemlerini etkin bir şekilde yönetebilir, IronPDF ise bu verileri iyi biçimlendirilmiş PDF dosyalarına dönüştürebilir.

IronPDF Kurulumu

Öncelikle, projenize IronPDF eklediğinizden emin olun. NuGet Paket Yöneticisi ile IronPDF paketini yükleyerek dahil edebilirsiniz.

PM > Install-Package IronPdf

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 4 - IronPDF'yi NuGet Paket Yöneticisi üzerinden yükleyin

Kod Örneği

Bunu uygulamanızda nasıl uygulayacağımızı daha derinlemesine inceleyelim. NHibernate'i kurup, çalışan ayrıntılar gibi veritabanından gerekli verileri aldıktan sonra, PDF belgesinin nasıl görünmesi gerektiğini temsil eden bir HTML şablonu hazırlarsınız. Bu HTML şablonu NHibernate'den alınan verilerle dinamik olarak doldurulabilir. Örneğin, bir çalışan raporu oluşturuyorsanız, şablon çalışanın adı, ID'si ve diğer ilgili detaylar için yer tutucular içerecektir.

İşte NHibernate kullanarak veri alma ve IronPDF kullanarak PDF'ye dönüştürme işlemini gösteren ayrıntılı bir kod örneği:

using IronPdf;
using NHibernate;

static void CreateEmployeeReport(int employeeId)
{
    // Open a session to interact with the database
    using (var session = OpenSession())
    {
        // Retrieve the employee object based on the provided ID
        var employee = session.Get<Employee>(employeeId);

        // Create an instance of the ChromePdfRenderer class from IronPDF
        var renderer = new ChromePdfRenderer();

        // Create the HTML content for the PDF, embedding employee data into the HTML
        var htmlTemplate = $@"
            <html>
            <head>
                <title>Employee Report</title>
            </head>
            <body>
                <h1>Employee Details</h1>
                <p>Name: {employee.FirstName} {employee.LastName}</p>
                <p>ID: {employee.Id}</p>
            </body>
            </html>";

        // Render the HTML string as a PDF document
        var pdf = renderer.RenderHtmlAsPdf(htmlTemplate);

        // Save the generated PDF to a file
        pdf.SaveAs("EmployeeReport.pdf");
    }
}

NHibernate C# (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - Yukarıdaki koddan örnek çıktı

Bu kodda, OpenSession(), bir NHibernate oturumunu başlatan ve bu oturumun çalışan verilerini getirmesi için kullanılan bir yöntemdir. IronPDF'den ChromePdfRenderer sınıfı daha sonra dolu HTML şablonunu alır ve bunu PDF olarak işler. Bu PDF yerel olarak kaydedilebilir, ancak bir web arayüzü aracılığıyla doğrudan bir kullanıcıya da aktarılabilir.

Sonuç

Bu öğreticide, NHibernate'in .NET uygulamalarında veritabanı işlemlerini nasıl basitleştirdiği ve IronPDF ile entegrasyonun, dinamik PDF belgelerinin oluşturulmasını sağlayarak işlevselliği nasıl artırdığı araştırıldı. NHibernate, sağlam veri yönetimi araçları sağlar; IronPDF ise verilerle doldurulmuş HTML şablonlarından profesyonel kalitede PDF'ler oluşturmanıza yardımcı olur.

IronPDF, ücretsiz bir deneme için kullanılabilir ve lisanslar, uygulamalarınıza güçlü PDF oluşturmayı entegre etmek için uygun maliyetli bir çözümle başlar. Bu araçlar birlikte, hem kurumsal hem de daha küçük ölçekli projeler için verilerin yönetilmesi ve belgelerin üretilmesi için kapsamlı bir çözüm sunar.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez