Microsoft Technologies NHibernate এবং ASP.NET Core এর মধ্যে Integration Techniques গাইড ও নোট

351

NHibernate একটি শক্তিশালী ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা C# এর সাথে ডেটাবেসের মধ্যে যোগাযোগ সহজতর করে। ASP.NET Core এর সাথে NHibernate ইন্টিগ্রেট করার মাধ্যমে, আপনি শক্তিশালী ডেটাবেস অ্যাক্সেস, সহজে ডেটা ম্যানিপুলেশন এবং পারফরম্যান্স অপটিমাইজেশন উপভোগ করতে পারবেন। এই ইন্টিগ্রেশন আপনাকে আরও স্কalable এবং maintainable অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে।

এখানে ASP.NET Core এ NHibernate ইন্টিগ্রেট করার কিছু গুরুত্বপূর্ণ কৌশল এবং পদক্ষেপ আলোচনা করা হবে।


1. NHibernate প্যাকেজ ইন্সটল করা

ASP.NET Core প্রজেক্টে NHibernate ব্যবহার করতে প্রথমে আপনাকে কিছু NuGet প্যাকেজ ইন্সটল করতে হবে। NHibernate ইন্সটল করতে আপনি নিচের কমান্ডটি ব্যবহার করতে পারেন:

Install-Package NHibernate
Install-Package NHibernate.Envers (যদি আপনি Audit Tracking চান)

এছাড়া, ASP.NET Core এ DI (Dependency Injection) ব্যবহার করতে NHibernate.AspNetCore প্যাকেজটি ইন্সটল করতে হতে পারে।


2. NHibernate Configuration Setup

ASP.NET Core এর সাথে NHibernate ব্যবহার করার জন্য আপনাকে NHibernate এর কনফিগারেশন এবং SessionFactory তৈরি করতে হবে। এই কনফিগারেশন সাধারণত hibernate.cfg.xml ফাইলে রাখা হয় অথবা কোডের মাধ্যমে সেট করা হয়।

hibernate.cfg.xml ফাইলের উদাহরণ:

<hibernate-configuration>
  <session-factory>
    <!-- Database Connection -->
    <property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="hibernate.connection.connection_string">Data Source=localhost;Initial Catalog=mydb;Integrated Security=True</property>
    <property name="hibernate.dialect">NHibernate.Dialect.MsSql2012Dialect</property>

    <!-- Other configurations -->
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">300</property>

    <!-- Enable 2nd-level cache -->
    <property name="hibernate.cache.use_second_level_cache">true</property>

    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
  </session-factory>
</hibernate-configuration>

এখানে, আপনি hibernate.connection.connection_string এর মাধ্যমে আপনার ডেটাবেস কনফিগার করেন।


3. NHibernate Dependency Injection (DI) Setup

ASP.NET Core এর সঙ্গে NHibernate ব্যবহার করার জন্য Dependency Injection সেটআপ করা খুবই গুরুত্বপূর্ণ। ASP.NET Core এর DI কন্টেইনারের মাধ্যমে NHibernate এর SessionFactory এবং Session ইনজেক্ট করা যাবে। এজন্য আপনি NHibernate এর কনফিগারেশন এবং SessionFactory তৈরি করবেন এবং তা DI কন্টেইনারে রেজিস্টার করবেন।

Startup.cs ফাইলে NHibernate DI কনফিগারেশন উদাহরণ:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // NHibernate SessionFactory Setup
        var sessionFactory = CreateSessionFactory();

        // Register NHibernate SessionFactory as Singleton
        services.AddSingleton(sessionFactory);
        
        // Register NHibernate Session for Scoped lifetime
        services.AddScoped(factory => sessionFactory.OpenSession());

        // Add other services like MVC, logging, etc.
        services.AddControllersWithViews();
    }

    private ISessionFactory CreateSessionFactory()
    {
        var configuration = new Configuration();
        configuration.Configure();  // Loads the hibernate.cfg.xml file

        // Additional NHibernate settings can be added here, if needed
        return configuration.BuildSessionFactory();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

এখানে:

  • CreateSessionFactory() মেথডে NHibernate কনফিগারেশন লোড করা হচ্ছে এবং ISessionFactory তৈরি করা হচ্ছে।
  • SessionFactory কে Singleton হিসেবে রেজিস্টার করা হচ্ছে, যাতে এটি অ্যাপ্লিকেশন লাইফটাইমে একবারই তৈরি হয়।
  • Session কে Scoped হিসেবে রেজিস্টার করা হয়েছে, যাতে প্রতিটি HTTP রিকোয়েস্টের জন্য আলাদা সেশন তৈরি হয়।

4. Unit of Work Pattern ব্যবহার করা

ASP.NET Core এ NHibernate ইন্টিগ্রেট করার সময় Unit of Work প্যাটার্ন ব্যবহার করা একটি ভালো পদ্ধতি। এটি নিশ্চিত করে যে আপনি একাধিক ডেটাবেস অপারেশন একসাথে ট্রানজেকশনে পরিচালনা করতে পারবেন এবং যদি কিছু ভুল হয় তবে আপনি সব অপারেশন একসাথে রিভার্ট করতে পারবেন।

Unit of Work Interface:

public interface IUnitOfWork
{
    Task CommitAsync();
    void Rollback();
}

Unit of Work Implementation:

public class UnitOfWork : IUnitOfWork
{
    private readonly ISession _session;

    public UnitOfWork(ISession session)
    {
        _session = session;
    }

    public async Task CommitAsync()
    {
        using (var transaction = _session.BeginTransaction())
        {
            await _session.FlushAsync();
            await transaction.CommitAsync();
        }
    }

    public void Rollback()
    {
        _session.Clear();
    }
}

এখানে, UnitOfWork ক্লাসটি NHibernate সেশন এবং ট্রানজেকশন পরিচালনা করে, এবং কমিট অথবা রোলব্যাক এর মাধ্যমে ডেটাবেস অপারেশন নিয়ন্ত্রণ করা হয়।


5. NHibernate এর সাথে Repository Pattern ব্যবহার

Repository Pattern একটি ভাল ডিজাইন প্যাটার্ন, যা NHibernate এর মাধ্যমে ডেটা অ্যাক্সেস অপারেশনগুলো পৃথক করে এবং অ্যাপ্লিকেশনের ডেটাবেস স্তরের কোডকে আরও পরিষ্কার এবং ম্যানেজেবল করে তোলে।

Repository Interface:

public interface IEmployeeRepository
{
    Task<Employee> GetByIdAsync(int id);
    Task SaveAsync(Employee employee);
}

Repository Implementation:

public class EmployeeRepository : IEmployeeRepository
{
    private readonly ISession _session;

    public EmployeeRepository(ISession session)
    {
        _session = session;
    }

    public async Task<Employee> GetByIdAsync(int id)
    {
        return await _session.GetAsync<Employee>(id);
    }

    public async Task SaveAsync(Employee employee)
    {
        using (var transaction = _session.BeginTransaction())
        {
            await _session.SaveOrUpdateAsync(employee);
            await transaction.CommitAsync();
        }
    }
}

এখানে, EmployeeRepository ক্লাসটি ISession ব্যবহার করে ডেটাবেস থেকে ডেটা রিট্রিভ এবং সেভ করার জন্য প্রক্রিয়াগুলি পরিচালনা করে।


6. Middleware বা Filters ব্যবহার করা

ASP.NET Core এ NHibernate সেশন ব্যবহারের সময় Middleware বা Action Filters ব্যবহার করা হতে পারে, যাতে আপনি প্রতিটি HTTP রিকোয়েস্টের জন্য সেশন তৈরি এবং শেষ করতে পারেন।

Example:

public class NHibernateSessionMiddleware
{
    private readonly RequestDelegate _next;

    public NHibernateSessionMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context, ISession session)
    {
        using (var transaction = session.BeginTransaction())
        {
            await _next(context);
            await transaction.CommitAsync();
        }
    }
}

এখানে, NHibernateSessionMiddleware ক্লাসটি প্রতিটি রিকোয়েস্টের জন্য সেশন তৈরি করে এবং ট্রানজেকশন পরিচালনা করে।


সারাংশ

ASP.NET Core এর সাথে NHibernate ইন্টিগ্রেট করার মাধ্যমে আপনি একটি শক্তিশালী ORM সিস্টেম ব্যবহার করতে পারবেন। Dependency Injection এর মাধ্যমে SessionFactory, Unit of Work, এবং Repository প্যাটার্ন ব্যবহার করে আপনি আপনার ডেটাবেস অপারেশনগুলো আরও পরিষ্কার, স্ক্যলেবল এবং maintainable করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...