Native SQL এর সাথে Result Transformer ব্যবহার

Stored Procedure এবং Native SQL Integration - এন হাইবারনেট (NHibernate) - Microsoft Technologies

323

NHibernate তে, Native SQL ব্যবহার করে আপনি সরাসরি SQL কুয়েরি চালাতে পারেন। তবে কখনও কখনও আপনাকে SQL কুয়েরির ফলাফলকে NHibernate এর ডোমেন অবজেক্টে ম্যাপ করতে হতে পারে। এই কাজটি করার জন্য, NHibernate এর ResultTransformer ব্যবহার করা হয়। ResultTransformer হল একটি টুল যা SQL কুয়েরির রিজাল্টকে হাই-লেভেল অবজেক্টে বা কাস্টম অবজেক্টে রূপান্তরিত করতে সাহায্য করে।

Native SQL কী?

Native SQL হল SQL কুয়েরি যা সরাসরি ডেটাবেসের ভাষায় লেখা হয়, যেমন SQL Server, MySQL, PostgreSQL ইত্যাদিতে ব্যবহার করা হয়। NHibernate এ Native SQL ব্যবহার করে, আপনি সাধারণ SQL কুয়েরি লিখতে পারেন যা NHibernate এর হাই-লেভেল (object-relational) ফিচারগুলোর বাইরে চলে যায়।


Result Transformer কী?

ResultTransformer একটি ইন্টারফেস যা Native SQL কুয়েরির ফলাফলকে আপনার নির্দিষ্ট অবজেক্টে রূপান্তরিত করতে ব্যবহৃত হয়। সাধারণত, SQL কুয়েরির রেজাল্ট গুলো object[] বা IDataReader এর আকারে আসে। ResultTransformer এর মাধ্যমে এই রেজাল্টগুলোকে NHibernate এর ডোমেন অবজেক্ট বা কাস্টম অবজেক্টে রূপান্তর করা হয়।


ResultTransformer ব্যবহার করার প্রক্রিয়া

ধরা যাক, আপনি একটি Employee এবং Department টেবিলের সাথে কাজ করছেন এবং আপনি SQL কুয়েরির মাধ্যমে উভয়ের তথ্য একত্রে পেতে চান।

1. Employee এবং Department ক্লাস উদাহরণ

public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
    public virtual string Department { get; set; }
}

public class Department
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

2. Native SQL কুয়েরি উদাহরণ

এখন, আপনি একটি Native SQL কুয়েরি চালাতে চান যা Employee এবং Department এর ডেটা একসাথে ফেরত দিবে।

using NHibernate;
using NHibernate.Transform;
using System;
using System.Collections.Generic;

public class EmployeeService
{
    private readonly ISession session;

    public EmployeeService(ISession session)
    {
        this.session = session;
    }

    public void GetEmployeesWithDepartments()
    {
        string sql = @"
            SELECT e.Id AS EmployeeId, e.Name AS EmployeeName, e.Age, d.Name AS DepartmentName
            FROM Employee e
            JOIN Department d ON e.Department = d.Name";
        
        var query = session.CreateSQLQuery(sql);
        
        // ResultTransformer ব্যবহার করে SQL রেজাল্টকে কাস্টম অবজেক্টে রূপান্তরিত করা
        query.SetResultTransformer(Transformers.AliasToBean<EmployeeDepartmentDTO>());

        // রেজাল্ট ফিরিয়ে আনা
        var result = query.List<EmployeeDepartmentDTO>();

        foreach (var item in result)
        {
            Console.WriteLine($"Employee: {item.EmployeeName}, Department: {item.DepartmentName}, Age: {item.Age}");
        }
    }
}

এখানে:

  • CreateSQLQuery ব্যবহার করে একটি Native SQL কুয়েরি চালানো হয়েছে।
  • SetResultTransformer দিয়ে, কুয়েরির রেজাল্টকে EmployeeDepartmentDTO অবজেক্টে রূপান্তর করা হয়েছে।

3. DTO (Data Transfer Object) ক্লাস

এখানে, আমরা একটি DTO (Data Transfer Object) তৈরি করেছি, যেটি SQL কুয়েরির ফলাফল ধারণ করবে।

public class EmployeeDepartmentDTO
{
    public virtual int EmployeeId { get; set; }
    public virtual string EmployeeName { get; set; }
    public virtual int Age { get; set; }
    public virtual string DepartmentName { get; set; }
}

4. ResultTransformer এর সুবিধা

ResultTransformer ব্যবহার করে আপনি সহজে Native SQL কুয়েরির ফলাফলকে কাস্টম অবজেক্টে রূপান্তর করতে পারেন। এটি বিভিন্ন সিচুয়েশনে উপকারী যেখানে আপনি কেবল নির্দিষ্ট ডেটা বা কমপ্লেক্স অবজেক্টের প্রপার্টি চান।

যেমন:

  • AliasToBean: একটি DTO ক্লাসে SQL কুয়েরির রেজাল্ট ম্যাপ করতে ব্যবহার করা হয়।
  • Transformers.AliasToEntityMap: এটি SQL কুয়েরির রেজাল্টকে কাস্টম মেপিং আকারে ফেরত দেয়, যেখানে কলাম নামগুলো ম্যাপ করা হয় একটি ডিকশনারি হিসেবে।

এছাড়া, আপনি আরও অনেক ধরনের ResultTransformer ব্যবহার করতে পারেন, যেমন:

  • Transformers.AliasToBean: SQL কুয়েরির রেজাল্টকে DTO ক্লাসে ম্যাপ করে।
  • Transformers.AliasToEntityMap: SQL কুয়েরির রেজাল্টকে একটি ডিকশনারিতে রূপান্তরিত করে, যেখানে কী হল কলাম নাম এবং মান হল কলাম এর ভ্যালু।

Native SQL এবং ResultTransformer এর উপকারিতা

  • ফ্লেক্সিবিলিটি: Native SQL এর মাধ্যমে আপনি যেকোনো ধরনের কাস্টম কুয়েরি লিখতে পারেন এবং এর ফলাফলকে নিজস্ব ক্লাসে রূপান্তর করতে পারেন।
  • পারফরম্যান্স: যখন আপনি ডেটাবেস থেকে অনেক জটিল ডেটা নিয়ে আসছেন, তখন ResultTransformer আপনার ডেটাকে সঠিকভাবে ম্যাপ করে দ্রুত আউটপুট পেতে সাহায্য করে।
  • কাস্টম কুয়েরি: কিছু ক্ষেত্রে, NHibernate এর হাই-লেভেল কুয়েরি মেথড ব্যবহার করা সঠিক হতে পারে না, তখন Native SQL একটি কার্যকর পছন্দ।

সারাংশ

Native SQL এবং ResultTransformer ব্যবহার করে, NHibernate এর সাথে SQL কুয়েরি চালানো এবং কুয়েরির রেজাল্টকে কাস্টম অবজেক্টে রূপান্তর করা যায়। এটি ডেটাবেস কুয়েরি পরিচালনা করার একটি শক্তিশালী এবং ফ্লেক্সিবল পদ্ধতি, বিশেষ করে যখন আপনাকে জটিল কুয়েরি বা কাস্টম ডেটা লোড করতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...