Dependency Injection এর মাধ্যমে DbContext ব্যবহার

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Entity Framework এর সাথে ASP.NET Core Integration |
185
185

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা কম্পোনেন্ট বা ক্লাসগুলোর মধ্যে ডিপেনডেন্সি (অথবা প্রয়োজনীয় অবজেক্ট) ইনজেক্ট করার মাধ্যমে তাদের মধ্যে সংযুক্তি (coupling) কমিয়ে আনে। ASP.NET Core অ্যাপ্লিকেশনের মধ্যে DbContext এর ইনস্ট্যান্স ইনজেক্ট করার জন্য DI ব্যবহৃত হয়, যার ফলে ডেটাবেসের সাথে কাজ করা আরো সহজ এবং টেস্টেবল হয়।

ASP.NET Core এর মধ্যে DbContext কে Dependency Injection ব্যবহার করে ইনজেক্ট করা হয়, যাতে ডেটাবেস অ্যাক্সেসের জন্য কনফিগারেশন এবং জীবনচক্র (lifecycle) পরিচালনা করা সহজ হয়। DbContext কে DI মাধ্যমে ব্যবহার করার সুবিধা হলো, এটি আপনাকে একটি কনট্রোল্ড লাইফটাইম প্রদান করে, যেমন scoped lifetime, যাতে এক HTTP রিকোয়েস্টে একটাই DbContext তৈরি হয়।


DbContext কে Dependency Injection (DI) এর মাধ্যমে কনফিগার করা

ASP.NET Core অ্যাপ্লিকেশন তৈরি করার সময়, DbContext কে DI কনটেইনারে রেজিস্টার করতে হয়। এটি সাধারণত Startup.cs ফাইলে করা হয়, যেখানে আপনি ConfigureServices মেথডে এটি কনফিগার করেন।

এখানে, ASP.NET Core এর মাধ্যমে DbContext কে DI এ কিভাবে রেজিস্টার এবং ব্যবহার করতে হয় তা দেখানো হলো।


DbContext কে DI এ রেজিস্টার করা

ধরা যাক, আমাদের একটি ApplicationDbContext নামে DbContext ক্লাস রয়েছে এবং এটি SQL Server ডেটাবেস ব্যবহার করবে।

1. DbContext তৈরি করা

প্রথমে, ApplicationDbContext তৈরি করি যা আপনার ডেটাবেসের টেবিলের সাথে যোগাযোগ করবে।

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    { }

    public DbSet<Employee> Employees { get; set; }
}

2. DbContext কে DI কনটেইনারে রেজিস্টার করা

এখন, Startup.cs ফাইলে ConfigureServices মেথডে DbContext কে DI কনটেইনারে রেজিস্টার করতে হবে। এর মাধ্যমে ASP.NET Core নিশ্চিত করবে যে, আপনি যেকোনো ক্লাসে ApplicationDbContext এর ইনস্ট্যান্স সরাসরি ইনজেক্ট করতে পারবেন।

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // DbContext রেজিস্টার করা
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        // অন্যান্য সার্ভিস রেজিস্টার করা
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // অ্যাপ কনফিগারেশন
    }
}

এখানে, AddDbContext<ApplicationDbContext> মেথড ব্যবহার করে আমরা DbContext রেজিস্টার করেছি, এবং এটি SQL Server ডেটাবেসের সাথে সংযুক্ত হবে, যেখানে Configuration.GetConnectionString("DefaultConnection") আপনার appsettings.json ফাইল থেকে ডেটাবেস কানেকশন স্ট্রিং টানবে।


DbContext ইনজেক্ট করা

এখন, আপনি যেকোনো ক্লাসে, যেমন Controller বা Service ক্লাসে, ApplicationDbContext ইনজেক্ট করতে পারবেন।

3. Controller-এ DbContext ইনজেক্ট করা

এখন, আপনার Controller ক্লাসে ApplicationDbContext ইনজেক্ট করা হবে:

public class EmployeeController : Controller
{
    private readonly ApplicationDbContext _context;

    // Dependency Injection এর মাধ্যমে DbContext ইনজেক্ট করা
    public EmployeeController(ApplicationDbContext context)
    {
        _context = context;
    }

    // Employee লিস্ট প্রদর্শন করা
    public async Task<IActionResult> Index()
    {
        var employees = await _context.Employees.ToListAsync();
        return View(employees);
    }
}

এখানে, ApplicationDbContext কে কনস্ট্রাক্টর ইনজেকশন (constructor injection) এর মাধ্যমে EmployeeController ক্লাসে ইনজেক্ট করা হয়েছে। এটি তখন স্বয়ংক্রিয়ভাবে ডেটাবেসের সাথে যোগাযোগ করতে পারে।

4. Service Layer-এ DbContext ইনজেক্ট করা

আপনি Service Layer ব্যবহার করলেও DbContext ইনজেক্ট করতে পারবেন। উদাহরণস্বরূপ:

public class EmployeeService
{
    private readonly ApplicationDbContext _context;

    // Dependency Injection এর মাধ্যমে DbContext ইনজেক্ট করা
    public EmployeeService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<IEnumerable<Employee>> GetAllEmployeesAsync()
    {
        return await _context.Employees.ToListAsync();
    }
}

এখন, আপনি এই EmployeeService ক্লাসটিকে Controller বা অন্য কোনো জায়গায় ইনজেক্ট করে ব্যবহার করতে পারবেন।


DbContext এর লাইফটাইম এবং Scoped Lifetime

DbContext সাধারণত scoped lifetime হিসেবে রেজিস্টার করা হয়, অর্থাৎ এটি এক HTTP রিকোয়েস্টের জন্য একটি ইনস্ট্যান্স তৈরি হয় এবং সেই রিকোয়েস্টের সাথে সংযুক্ত থাকে। ডিফল্টভাবে, যখন আপনি AddDbContext ব্যবহার করেন, তখন এটি scoped লাইফটাইমে রেজিস্টার করা হয়, যা নিশ্চিত করে যে, এক রিকোয়েস্টের জন্য একটাই DbContext ব্যবহার হবে।

এটি নিশ্চিত করে যে, আপনি যখন DbContext ইনজেক্ট করেন, তখন প্রতিটি HTTP রিকোয়েস্টের জন্য এটি একটি নতুন ইনস্ট্যান্স তৈরি হয় এবং সেটি ডেটাবেস ট্রানজেকশন এবং টেস্টিং এর জন্য উপযোগী।


DbContext ইনজেক্ট করার সুবিধা

  1. লাইফটাইম ম্যানেজমেন্ট: DbContext DI এর মাধ্যমে কনটেইনারের মাধ্যমে পরিচালিত হওয়ার ফলে লাইফটাইম ম্যানেজমেন্ট সহজ হয়।
  2. টেস্টেবিলিটি: DbContext DI এর মাধ্যমে ইনজেক্ট করা হলে, আপনি সহজেই এটি মক করতে পারবেন, যা ইউনিট টেস্টিং এর জন্য উপকারী।
  3. বিকশিত স্থাপত্য: ডেটাবেস অ্যাক্সেস কোড এবং বিজনেস লজিক আলাদা হয়ে যায়, ফলে অ্যাপ্লিকেশনটি আরো পরিষ্কার এবং মডুলার হয়।

সারাংশ

Dependency Injection (DI) এর মাধ্যমে DbContext ব্যবহার করার ফলে, অ্যাপ্লিকেশন ডিজাইনে ক্লিন কোড এবং টেস্টেবিলিটি আসে। ASP.NET Core অ্যাপ্লিকেশনগুলোতে DbContext কে DI মাধ্যমে ইনজেক্ট করে, আপনি ডেটাবেস অপারেশনগুলোকে কেন্দ্র করে পরিষ্কার, মডুলার, এবং টেস্টযোগ্য স্থাপত্য তৈরি করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion