Stored Procedure এবং View ব্যবহার করা

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework)
82
82

Entity Framework (EF) ডাটাবেসের সাথে যোগাযোগের জন্য প্রাথমিকভাবে LINQ এবং DbSet ব্যবহার করে, তবে কখনও কখনও ডেটাবেসের Stored Procedure (SP) এবং View ব্যবহার করা বেশি কার্যকর হতে পারে। Stored Procedure এবং View ব্যবহার করে আপনি ডেটাবেসের মধ্যে জটিল লজিক বা কুয়েরি প্রক্রিয়া পরিচালনা করতে পারেন এবং পারফরম্যান্স উন্নত করতে পারেন।


Stored Procedure (SP) কী?

Stored Procedure হল একটি প্রি-কম্পাইলড SQL স্ক্রিপ্ট, যা ডেটাবেস সার্ভারে সংরক্ষিত থাকে। এটি একাধিক SQL স্টেটমেন্টের একটি গ্রুপ হতে পারে, যা একটি নির্দিষ্ট কার্য সম্পাদন করে। EF তে, আপনি Stored Procedure কল করে কাস্টম SQL লজিক চালাতে পারেন এবং রেজাল্টস রিটার্ন করতে পারেন।

Stored Procedure কল করার উদাহরণ

ধরা যাক, আপনার ডেটাবেসে একটি GetStudentsByAge নামের Stored Procedure রয়েছে, যা একটি নির্দিষ্ট বয়সের ছাত্রদের ফিরিয়ে দেয়।

CREATE PROCEDURE GetStudentsByAge
    @Age INT
AS
BEGIN
    SELECT * FROM Students WHERE Age = @Age;
END

এখন, Entity Framework ব্যবহার করে এই Stored Procedure কল করতে পারেন:

using (var context = new SchoolContext())
{
    // Stored Procedure কল করা
    var age = 20;
    var students = context.Students.FromSqlRaw("EXEC GetStudentsByAge @Age = {0}", age).ToList();

    foreach (var student in students)
    {
        Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    }
}

এখানে:

  • FromSqlRaw মেথড ব্যবহার করে আমরা Stored Procedure কল করছি।
  • {0} হল age প্যারামিটার, যা SQL কোডের ভিতরে পাস করা হচ্ছে।

Asynchronous Stored Procedure Call

আপনি Stored Procedure কল করার জন্য Asynchronous অপশনও ব্যবহার করতে পারেন, যা বৃহৎ ডেটা সেটের জন্য কার্যকরী।

using (var context = new SchoolContext())
{
    var age = 20;
    var students = await context.Students.FromSqlRaw("EXEC GetStudentsByAge @Age = {0}", age).ToListAsync();

    foreach (var student in students)
    {
        Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    }
}

এখানে, ToListAsync() ব্যবহার করে আউটপুট অ্যাসিঙ্ক্রোনাসভাবে রিটার্ন করা হচ্ছে।


View কী?

View হল একটি ভার্চুয়াল টেবিল যা SQL কুয়েরি বা স্টেটমেন্টের মাধ্যমে তৈরি হয় এবং একটি লজিকাল ডেটা ভিউ তৈরি করে। এটি ডেটাবেসের মধ্যে একটি অবজেক্ট হিসেবে সঞ্চিত থাকে এবং এতে বিভিন্ন টেবিলের ডেটা একটি নির্দিষ্ট কুয়েরি অনুযায়ী একত্রিত করা হতে পারে। EF তে View এর সাথে কাজ করতে খুব সহজ, কারণ এটি একটি সাধারণ টেবিলের মতো কাজ করে।

View তৈরি করার উদাহরণ

ধরা যাক, আপনার ডেটাবেসে একটি StudentCourseView নামে একটি View তৈরি করা হয়েছে, যা ছাত্রদের নাম এবং তাদের কোর্সের নাম দেখায়।

CREATE VIEW StudentCourseView AS
SELECT s.Name AS StudentName, c.CourseName
FROM Students s
INNER JOIN Courses c ON s.StudentId = c.StudentId;

এখন, EF তে এই View ব্যবহার করে ডেটা রিট্রাইভ করা যায়:

public class StudentCourseView
{
    public string StudentName { get; set; }
    public string CourseName { get; set; }
}

using (var context = new SchoolContext())
{
    var studentCourses = context.Set<StudentCourseView>().ToList();

    foreach (var item in studentCourses)
    {
        Console.WriteLine($"Student: {item.StudentName}, Course: {item.CourseName}");
    }
}

এখানে:

  • StudentCourseView একটি POCO (Plain Old CLR Object) ক্লাস, যা View এর কলামগুলোর সাথে মাপ খায়।
  • context.Set(): EF এর মাধ্যমে View এর ডেটা রিটার্ন করা হচ্ছে, যা সাধারণ টেবিলের মতো কাজ করে।

Stored Procedure এবং View ব্যবহারের সুবিধা

  1. Performance Optimization: Stored Procedures ডেটাবেসে প্রি-কাম্পাইলড থাকে, যার ফলে কুয়েরি এক্সিকিউশনের সময় কম হয় এবং লোড দ্রুত হয়। এছাড়া, complex SQL কুয়েরি গুলি ডেটাবেসে প্রি-প্রসেস করা হয়, ফলে অ্যাপ্লিকেশন সাইডে কম লজিক প্রক্রিয়া লাগে।
  2. Code Reusability: একাধিক অ্যাপ্লিকেশনে একই Stored Procedure বা View ব্যবহার করা যেতে পারে, যা কোড পুনরাবৃত্তি কমায়।
  3. Data Integrity: Stored Procedure দিয়ে ডেটা হ্যান্ডলিং আরও নিরাপদ হয়, কারণ আপনি একাধিক SQL স্টেটমেন্ট একত্রে ব্যাচ প্রসেস করতে পারেন।
  4. Security: Stored Procedure ব্যবহার করলে অ্যাপ্লিকেশন ডেটাবেসের সরাসরি কুয়েরি এক্সিকিউট করতে পারে না, যা SQL Injection থেকে রক্ষা করে।

Stored Procedure এবং View ব্যবহারের পারফরম্যান্সের ওপর প্রভাব

  • Stored Procedure সাধারণত দ্রুত কার্যকরী হয়, কারণ এটি ডেটাবেসে প্রি-কাম্পাইলড থাকে। এটি পরবর্তীতে আরও দ্রুত এক্সিকিউট হয় এবং অ্যাপ্লিকেশন সাইডের উপর কম চাপ ফেলে।
  • View ডেটাবেসে একাধিক টেবিলের ডেটা একত্রে দেখানোর জন্য উপযুক্ত, তবে খুব বড় View বা জটিল কুয়েরি হলে পারফরম্যান্সের সমস্যা হতে পারে।

Summary

Entity Framework এর মাধ্যমে Stored Procedure এবং View ব্যবহার করে আপনি ডেটাবেসের জটিল কুয়েরি লজিক এবং পারফরম্যান্স উন্নত করতে পারেন। Stored Procedure দিয়ে আপনি ডেটাবেসের জন্য কাস্টম লজিক তৈরি করতে পারেন, এবং View দিয়ে একাধিক টেবিলের ডেটা একত্রে ভিউ হিসেবে উপস্থাপন করতে পারেন। EF এ এই দুটি ফিচার ব্যবহার করে, আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং নিরাপত্তা বৃদ্ধি করতে পারবেন।

Content added By

Stored Procedure কে EF এর মধ্যে ম্যানেজ করা

80
80

Entity Framework (EF) তে Stored Procedure ব্যবহার করা একটি অত্যন্ত কার্যকরী পদ্ধতি, যার মাধ্যমে আপনি ডেটাবেস অপারেশনগুলি আরো দ্রুত এবং নিরাপদে পরিচালনা করতে পারেন। EF তে Stored Procedure ব্যবহার করার জন্য কিছু নির্দিষ্ট কৌশল রয়েছে, যা আপনার কোডে Raw SQL কুয়েরি বা Stored Procedure ব্যবহার করার জন্য সহায়তা করে। EF 6 এবং EF Core উভয়ই Stored Procedure এর সমর্থন দেয়, তবে EF Core এ কিছু নতুন ফিচার এবং সুবিধা রয়েছে যা Stored Procedure ব্যবস্থাপনা আরো সহজ এবং শক্তিশালী করে।


Stored Procedure কিভাবে EF তে ব্যবহার করবেন

EF এর মাধ্যমে Stored Procedure কল করার জন্য মূলত দুইটি পদ্ধতি ব্যবহার করা হয়:

  1. FromSqlRaw (ডেটা রিট্রাইভ করার জন্য)
  2. ExecuteSqlRaw (ইনসার্ট, আপডেট বা ডিলিট অপারেশন করার জন্য)

এগুলো ছাড়াও EF 7+ এ কিছু নতুন ফিচার যেমন ExecuteSqlInterpolated এবং FromSqlInterpolated যুক্ত করা হয়েছে।


FromSqlRaw দিয়ে Stored Procedure থেকে ডেটা রিটার্ন করা

FromSqlRaw মেথড ব্যবহার করে আপনি Stored Procedure থেকে ডেটা রিটার্ন করতে পারেন এবং সেই ডেটা আপনার Entity মডেল দিয়ে ম্যাপ করতে পারেন।

উদাহরণ:

ধরা যাক, আপনার ডেটাবেসে একটি Stored Procedure রয়েছে যা একটি নির্দিষ্ট বয়সের ছাত্রদের তথ্য রিটার্ন করে:

CREATE PROCEDURE GetStudentsByAge
    @age INT
AS
BEGIN
    SELECT * FROM Students WHERE Age = @age;
END

এখন, EF এর মাধ্যমে এই Stored Procedure কল করে আমরা ডেটা রিটার্ন করতে পারি:

using (var context = new SchoolContext())
{
    var age = 20;

    // Stored Procedure থেকে ডেটা রিটার্ন করা
    var students = context.Students
                          .FromSqlRaw("EXEC GetStudentsByAge @age", 
                                      new SqlParameter("@age", age))
                          .ToList();

    foreach (var student in students)
    {
        Console.WriteLine($"{student.Name}, {student.Age}");
    }
}

এখানে:

  • FromSqlRaw: এটি Raw SQL কুয়েরি বা Stored Procedure কল করতে ব্যবহৃত হয়।
  • SqlParameter: প্যারামিটার ব্যবহার করে SQL কুয়েরির ইনপুট ডেটা সুরক্ষিতভাবে পাস করা হয়।

এভাবে EF আপনার Students Entity ক্লাসের সাথে রিটার্ন হওয়া ডেটা ম্যাপ করে এবং ডেটাবেস থেকে প্রয়োজনীয় তথ্য রিটার্ন করে।


ExecuteSqlRaw দিয়ে ডেটা ইনসার্ট বা আপডেট করা

ExecuteSqlRaw মেথড দিয়ে আপনি Stored Procedure কল করে ডেটাবেসে INSERT, UPDATE অথবা DELETE অপারেশন করতে পারেন। এই মেথডটি সাধারণত কোনো ডেটা রিটার্ন না করার সময় ব্যবহৃত হয়, যেমন যখন আপনি ডেটাবেসে কোনো রেকর্ড ইনসার্ট করতে চান।

উদাহরণ:

ধরা যাক, আপনার ডেটাবেসে একটি Stored Procedure রয়েছে যা একটি নতুন ছাত্র যোগ করে:

CREATE PROCEDURE AddStudent
    @name NVARCHAR(100),
    @age INT,
    @address NVARCHAR(200)
AS
BEGIN
    INSERT INTO Students (Name, Age, Address)
    VALUES (@name, @age, @address);
END

এখন, আপনি EF এর মাধ্যমে এই Stored Procedure কল করতে পারেন:

using (var context = new SchoolContext())
{
    var name = "John Doe";
    var age = 22;
    var address = "123 Main St";

    // Stored Procedure কল করে ডেটাবেসে ইনসার্ট করা
    context.Database.ExecuteSqlRaw("EXEC AddStudent @name, @age, @address", 
        new SqlParameter("@name", name),
        new SqlParameter("@age", age),
        new SqlParameter("@address", address));
}

এখানে:

  • ExecuteSqlRaw: এটি Raw SQL বা Stored Procedure এক্সিকিউট করতে ব্যবহৃত হয়। এটি কোনো রিটার্ন ভ্যালু দেয় না, কিন্তু এটি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে এবং ডেটা আপডেট, ইনসার্ট বা ডিলিট করে।

Stored Procedure এর আউটপুট মডেল মেপিং

যখন আপনি Stored Procedure থেকে ডেটা রিটার্ন করেন, EF স্বয়ংক্রিয়ভাবে আউটপুটকে Entity ক্লাসের সাথে ম্যাপ করে। তবে, আপনি যদি আউটপুটের জন্য একটি কাস্টম মডেল বা ডেটা ক্লাস ব্যবহার করতে চান, তবে EF তে আপনার আউটপুটকে সেই মডেলটির সাথে ম্যাপ করা যেতে পারে।

উদাহরণ:

ধরা যাক, আপনার একটি StudentDTO ক্লাস আছে যেটি Student Entity এর কিছু নির্দিষ্ট ফিল্ড নিয়ে তৈরি।

public class StudentDTO
{
    public string Name { get; set; }
    public int Age { get; set; }
}

using (var context = new SchoolContext())
{
    var age = 20;

    // FromSqlRaw দিয়ে কাস্টম DTO ব্যবহার করা
    var students = context.Set<StudentDTO>()
                          .FromSqlRaw("EXEC GetStudentsByAge @age", 
                                      new SqlParameter("@age", age))
                          .ToList();

    foreach (var student in students)
    {
        Console.WriteLine($"{student.Name}, {student.Age}");
    }
}

এখানে:

  • context.Set<StudentDTO>(): StudentDTO ক্লাসকে Entity হিসেবে ব্যবহার করা হচ্ছে।
  • FromSqlRaw: এটি Stored Procedure থেকে ডেটা রিটার্ন করে এবং StudentDTO ক্লাসে ম্যাপ করে।

Stored Procedure এবং EF Core

EF Core তে Stored Procedure ব্যবহার করার জন্য আপনাকে ExecuteSqlRaw বা FromSqlRaw ব্যবহার করতে হয়। EF Core 7 এবং তার পরবর্তী সংস্করণে কিছু নতুন ফিচার যুক্ত হয়েছে, যেমন ExecuteSqlInterpolated এবং FromSqlInterpolated, যা প্যারামিটারাইজড কুয়েরি লেখাকে আরও নিরাপদ করে তোলে। এই নতুন ফিচারের সাহায্যে SQL ইনজেকশন থেকে রক্ষা পাওয়া যায়।

উদাহরণ:

context.Database.ExecuteSqlInterpolated($"EXEC AddStudent {name}, {age}, {address}");

এখানে:

  • ExecuteSqlInterpolated: এটি string interpolation ব্যবহার করে SQL কুয়েরি তৈরি করে, যা প্যারামিটারাইজড এবং আরও নিরাপদ হয়।

সারাংশ

  • Stored Procedure EF তে ব্যবহার করতে, FromSqlRaw এবং ExecuteSqlRaw মেথডগুলি ব্যবহৃত হয়।
  • FromSqlRaw ডেটা রিটার্ন করা Stored Procedure কল করতে ব্যবহৃত হয়, এবং ExecuteSqlRaw ইনসার্ট, আপডেট বা ডিলিট অপারেশন করার জন্য ব্যবহৃত হয়।
  • EF 7 এবং তার পরবর্তী সংস্করণে ExecuteSqlInterpolated এবং FromSqlInterpolated ব্যবহার করা যেতে পারে, যা SQL ইনজেকশনের ঝুঁকি কমায়।
  • Stored Procedure ডেটাবেস অপারেশনগুলিকে সহজ, দ্রুত এবং নিরাপদ করতে সাহায্য করে, বিশেষত বড় অ্যাপ্লিকেশন বা কাস্টম ডেটাবেস অপারেশনগুলির জন্য।

এইভাবে, EF তে Stored Procedure ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং সিকিউরিটি উন্নত করতে পারবেন।

Content added By

Stored Procedure দিয়ে CRUD অপারেশন করা

64
64

Stored Procedures হল প্রি-কম্পাইলড SQL কুয়েরি বা স্ক্রিপ্ট, যা ডেটাবেসে সংরক্ষিত থাকে এবং একাধিকবার চালানো যেতে পারে। Entity Framework (EF) ব্যবহার করে আপনি সহজেই Stored Procedure দিয়ে CRUD (Create, Read, Update, Delete) অপারেশন ইমপ্লিমেন্ট করতে পারেন। EF আপনাকে এই Stored Procedure গুলিকে কল করতে এবং তাদের মাধ্যমে ডেটাবেসে পরিবর্তন করতে সহায়তা করে।

এই টিউটোরিয়ালে আমরা দেখব কিভাবে EF ব্যবহার করে Stored Procedure এর মাধ্যমে CRUD অপারেশন করা যায়।


Stored Procedure দিয়ে CRUD অপারেশন চালানোর জন্য প্রাথমিক ধাপ

EF তে Stored Procedure ব্যবহার করতে হলে প্রথমে আপনাকে কিছু প্রাথমিক কাজ করতে হবে:

  1. Stored Procedure তৈরি করা: আপনার ডেটাবেসে Stored Procedure তৈরি করুন।
  2. DbContext ক্লাসে Stored Procedure এর জন্য মেথড সংজ্ঞায়িত করা: EF তে Stored Procedure কল করার জন্য DbSet বা DbContext ক্লাসে কাস্টম মেথড তৈরি করতে হয়।
  3. Stored Procedure কল করা: EF এর মাধ্যমে SQL কুয়েরি ব্যবহার করে Stored Procedure কল করুন।

1. Stored Procedure তৈরি করা

প্রথমেই আপনাকে ডেটাবেসে একটি Stored Procedure তৈরি করতে হবে। নিচে একটি সাধারণ Stored Procedure এর উদাহরণ দেয়া হল, যা Employee টেবিলের মধ্যে নতুন ডেটা ইনসার্ট করবে:

CREATE PROCEDURE InsertEmployee
    @EmployeeName NVARCHAR(100),
    @EmployeeAge INT
AS
BEGIN
    INSERT INTO Employees (Name, Age) 
    VALUES (@EmployeeName, @EmployeeAge)
END

এখানে, InsertEmployee নামে একটি Stored Procedure তৈরি করা হয়েছে, যা Employees টেবিলে নতুন কর্মী যোগ করবে।


2. DbContext ক্লাসে Stored Procedure এর জন্য মেথড সংজ্ঞায়িত করা

এখন আপনার EF DbContext ক্লাসে Stored Procedure এর মাধ্যমে অপারেশন চালানোর জন্য মেথড তৈরি করতে হবে।

Create (Insert) Operation:

public class ApplicationDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
    
    // Create (Insert) operation via Stored Procedure
    public void InsertEmployee(string name, int age)
    {
        var nameParam = new SqlParameter("@EmployeeName", name);
        var ageParam = new SqlParameter("@EmployeeAge", age);
        
        // Execute the stored procedure
        this.Database.ExecuteSqlRaw("EXEC InsertEmployee @EmployeeName, @EmployeeAge", nameParam, ageParam);
    }
}

এখানে:

  • InsertEmployee মেথডে আমরা SqlParameter ব্যবহার করে Stored Procedure এর ইনপুট প্যারামিটার পাঠাচ্ছি।
  • ExecuteSqlRaw মেথড ব্যবহার করে Stored Procedure কল করা হয়েছে।

Read (Select) Operation:

আপনি Stored Procedure ব্যবহার করে ডেটা রিট্রাইভ করতে পারেন, যেমন:

public class ApplicationDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    // Read (Select) operation via Stored Procedure
    public List<Employee> GetEmployees()
    {
        return this.Employees.FromSqlRaw("EXEC GetAllEmployees").ToList();
    }
}

এখানে:

  • FromSqlRaw মেথড ব্যবহার করে আমরা GetAllEmployees Stored Procedure কল করে Employee টেবিলের সমস্ত ডেটা রিট্রাইভ করছি।

3. Update Operation

Stored Procedure ব্যবহার করে ডেটাবেসে আপডেট অপারেশন চালানোও সম্ভব। নিচে একটি Stored Procedure এবং সেটি EF এর মাধ্যমে কল করার উদাহরণ:

Stored Procedure:

CREATE PROCEDURE UpdateEmployee
    @EmployeeId INT,
    @EmployeeName NVARCHAR(100),
    @EmployeeAge INT
AS
BEGIN
    UPDATE Employees 
    SET Name = @EmployeeName, Age = @EmployeeAge
    WHERE EmployeeId = @EmployeeId
END

C# Code for Update:

public class ApplicationDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    // Update operation via Stored Procedure
    public void UpdateEmployee(int employeeId, string name, int age)
    {
        var idParam = new SqlParameter("@EmployeeId", employeeId);
        var nameParam = new SqlParameter("@EmployeeName", name);
        var ageParam = new SqlParameter("@EmployeeAge", age);
        
        // Execute the stored procedure
        this.Database.ExecuteSqlRaw("EXEC UpdateEmployee @EmployeeId, @EmployeeName, @EmployeeAge", idParam, nameParam, ageParam);
    }
}

এখানে:

  • UpdateEmployee মেথডে আমরা তিনটি প্যারামিটার পাঠাচ্ছি, এবং ExecuteSqlRaw ব্যবহার করে Stored Procedure কল করছি।

4. Delete Operation

Delete অপারেশনের জন্যও আপনি Stored Procedure ব্যবহার করতে পারেন। নিচে একটি DeleteEmployee Stored Procedure এবং এটি EF এর মাধ্যমে কল করার উদাহরণ দেয়া হল:

Stored Procedure:

CREATE PROCEDURE DeleteEmployee
    @EmployeeId INT
AS
BEGIN
    DELETE FROM Employees WHERE EmployeeId = @EmployeeId
END

C# Code for Delete:

public class ApplicationDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    // Delete operation via Stored Procedure
    public void DeleteEmployee(int employeeId)
    {
        var idParam = new SqlParameter("@EmployeeId", employeeId);
        
        // Execute the stored procedure
        this.Database.ExecuteSqlRaw("EXEC DeleteEmployee @EmployeeId", idParam);
    }
}

এখানে:

  • DeleteEmployee মেথডে আমরা EmployeeId প্যারামিটার পাঠাচ্ছি এবং ExecuteSqlRaw ব্যবহার করে Stored Procedure কল করছি, যাতে নির্দিষ্ট কর্মী ডেটাবেস থেকে মুছে ফেলা হয়।

Stored Procedure এর সাথে Parameters ব্যবহৃত করা

Stored Procedure কল করার সময় আপনি SQL প্যারামিটার ব্যবহার করতে পারেন, যেগুলি SQL ইনজেকশন প্রতিরোধে সহায়ক। এর মাধ্যমে আপনি ডায়নামিক ডেটা নিয়ে কাজ করতে পারেন, যেমন:

var parameter = new SqlParameter("@EmployeeId", SqlDbType.Int) { Value = employeeId };

এইভাবে, আপনি প্যারামিটারাইজড কুয়েরি চালিয়ে SQL ইনজেকশন এড়াতে পারবেন।


সারাংশ

  • CRUD (Create, Read, Update, Delete) অপারেশনগুলি EF এর মাধ্যমে Stored Procedure ব্যবহার করে সহজে ইমপ্লিমেন্ট করা যায়।
  • ExecuteSqlRaw এবং FromSqlRaw মেথড ব্যবহার করে Stored Procedure কল করা হয়।
  • SqlParameter ব্যবহার করে SQL ইনজেকশন থেকে নিরাপদে ডেটা পাঠানো যায়।
  • Stored Procedure গুলি ডেটাবেসের মধ্যে রাখা যায়, যা একাধিক অ্যাপ্লিকেশনে পুনঃব্যবহার করা যায় এবং ডেটাবেসের পারফরম্যান্স বাড়াতে সহায়তা করে।

Stored Procedure দিয়ে CRUD অপারেশন ব্যবহার করলে ডেটাবেসের নিরাপত্তা, পারফরম্যান্স এবং রিয়ুজেবিলিটি বাড়াতে সাহায্য করে।

Content added By

Database Views তৈরি এবং ব্যবহার

70
70

Database Views হল ডেটাবেসের একটি ভার্চুয়াল টেবিল, যা মূল ডেটাবেস টেবিল থেকে নির্বাচিত ডেটাকে একটি নির্দিষ্ট উপস্থাপনায় প্রদর্শন করে। একটি View সাধারণত SQL কুয়েরি বা স্টোরড প্রোসিজার (Stored Procedure) হিসেবে তৈরি করা হয়, যা একাধিক টেবিলের ডেটাকে একত্রিত করে বা বিশেষভাবে সাজিয়ে একটি নির্দিষ্ট আউটপুট প্রদান করে। Entity Framework (EF) এ Views ব্যবহার করা অনেকটা স্টোরড প্রোসিজারের মতো, তবে এখানে মূল লক্ষ্য হল ডেটা নির্বাচন এবং ফরম্যাটিং, যা ডেটাবেসের বিভিন্ন অংশে পুনরায় ব্যবহার করা যায়।


Database View কী?

একটি Database View আসলে একটি সিলেক্ট কুয়েরির ফলাফল হিসেবে কাজ করে, যেটি ডেটাবেসের টেবিলগুলির ওপর ভিত্তি করে তৈরি করা হয়। এটি মূলত ভার্চুয়াল টেবিল, কারণ এটি ডেটাবেসের কোনো বাস্তব টেবিলের মতো সংরক্ষিত হয় না, তবে কেবল একটি SQL কুয়েরি বা ডেটাবেসের ডেটার নির্দিষ্ট উপস্থাপনা হিসেবে কাজ করে।

View তৈরি করতে গিয়ে, আপনি সাধারণত এক বা একাধিক টেবিলের ডেটা একত্রিত করবেন, এবং সেই ডেটা প্রদর্শনের জন্য একটি নির্দিষ্ট কাঠামো তৈরির চেষ্টা করবেন।


Database Views তৈরি করা

ডেটাবেসে View তৈরি করতে SQL ব্যবহার করা হয়। Entity Framework (EF) এ View তৈরি করা এবং তারপরে ব্যবহার করার প্রক্রিয়া নিম্নরূপ:

১. SQL তে View তৈরি করা

প্রথমে, ডেটাবেসে View তৈরি করতে হয়। ধরুন, একটি সেলস রিপোর্ট তৈরি করতে চান, যেখানে পণ্য এবং বিক্রির তথ্য একত্রিত করা হবে। একটি সাধারণ View তৈরির SQL কুয়েরি হতে পারে:

CREATE VIEW SalesReport AS
SELECT ProductName, SUM(Quantity) AS TotalQuantity, SUM(TotalPrice) AS TotalSales
FROM Sales
JOIN Products ON Sales.ProductID = Products.ProductID
GROUP BY ProductName;

এই কুয়েরিটি SalesReport নামে একটি View তৈরি করবে, যেখানে পণ্যের বিক্রি এবং মোট বিক্রির পরিমাণ দেওয়া থাকবে।

২. Entity Framework মডেলে View যোগ করা

EF-এর মধ্যে, View এর সাথে মডেল কনফিগারেশন করার জন্য আপনাকে কেবল View এর ডেটা রিড করার জন্য একটি ক্লাস তৈরি করতে হবে। মনে রাখবেন, View কে Entity হিসেবে ব্যবহার করার জন্য আপনাকে DbSet তৈরি করতে হবে, যদিও এটি সাধারণত Read-Only।

public class SalesReport
{
    public string ProductName { get; set; }
    public int TotalQuantity { get; set; }
    public decimal TotalSales { get; set; }
}

public class ApplicationDbContext : DbContext
{
    public DbSet<SalesReport> SalesReports { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // View এর জন্য ডেটাবেস মডেল কনফিগারেশন
        modelBuilder.Entity<SalesReport>(entity =>
        {
            entity.HasNoKey();  // View এ কোনো প্রাইমারি কী থাকে না
            entity.ToView("SalesReport");  // View এর নাম উল্লেখ
        });
    }
}

৩. View থেকে ডেটা রিড করা

একবার View তৈরি এবং মডেলে কনফিগার করা হলে, আপনি Entity Framework এর মাধ্যমে সহজেই View থেকে ডেটা রিড করতে পারবেন।

using (var context = new ApplicationDbContext())
{
    var salesReports = context.SalesReports.ToList();
    foreach (var report in salesReports)
    {
        Console.WriteLine($"Product: {report.ProductName}, Total Quantity: {report.TotalQuantity}, Total Sales: {report.TotalSales}");
    }
}

এই কোডটি SalesReport View থেকে ডেটা রিড করবে এবং তারপরে তা প্রদর্শন করবে।


Database Views এর ব্যবহার

১. ডেটা অ্যাবস্ট্রাকশন (Data Abstraction)

Views আপনাকে মূল টেবিলের ডেটা অ্যাবস্ট্রাক্ট করতে সাহায্য করে, যার ফলে একাধিক টেবিলের ডেটাকে একটি সোজা ও পরিষ্কার উপস্থাপনায় রেন্ডার করা যায়। এর মাধ্যমে আপনি ডেটাবেসের কাঠামো থেকে ব্যবহারকারীদের দূরে রাখতে পারেন এবং কেবল প্রয়োজনীয় ডেটাই প্রদর্শন করতে পারেন।

২. কনসোলিডেটেড ডেটা (Consolidated Data)

Views ব্যবহার করে একাধিক টেবিলের ডেটা একত্রিত করা যায় এবং সেই ডেটাকে একটি সহজ ও ব্যবহারযোগ্য ফরম্যাটে উপস্থাপন করা যায়। এটি বিশেষভাবে তখন কার্যকরী হয়, যখন আপনাকে ডেটাবেসের মধ্যে সম্পর্কিত টেবিলের ডেটা একত্রিত করতে হয়।

৩. ডেটা রিড-অনলি (Read-Only Data)

Views সাধারণত Read-Only হয়ে থাকে, অর্থাৎ আপনি Views থেকে ডেটা রিড করতে পারেন, তবে তাতে ডেটা ইনসার্ট, আপডেট বা ডিলিট করতে পারবেন না। এর মানে হল, যে ডেটা ব্যবহারকারীদের দেখানো হচ্ছে তা পূর্বে তৈরি হওয়া এবং কার্যকরী ডেটাবেস টেবিল থেকে একত্রিত।

৪. পারফরম্যান্স অপটিমাইজেশন

Views ব্যবহার করে আপনি নির্দিষ্ট ধরনের জটিল কুয়েরি পুনরাবৃত্তি করতে পারবেন, এবং তা সরাসরি ডেটাবেসে সংরক্ষণ করে রাখতে পারবেন। এতে ডেটাবেসে সিলেক্ট কুয়েরি প্রক্রিয়া দ্রুত হয়, কারণ Views আগে থেকেই প্রিপেয়ার্ড থাকে।


Entity Framework এ Stored Procedure এবং View পরিচালনা

Stored Procedure এবং Views এ কাজ করার জন্য Entity Framework-এর মধ্যে কিছু সীমাবদ্ধতা রয়েছে, তবে আপনি FromSqlRaw বা ExecuteSqlRaw এর মতো মেথড ব্যবহার করে এগুলোকে সমর্থন দিতে পারেন। এই মেথডগুলো সরাসরি SQL স্টেটমেন্ট ব্যবহার করতে সাহায্য করে।

var salesReports = context.SalesReports.FromSqlRaw("SELECT * FROM SalesReport").ToList();

সারাংশ

Entity Framework-এ Database Views হল শক্তিশালী টুল যা ডেটা একত্রিত, প্রসেস, এবং উপস্থাপনা করতে সাহায্য করে। আপনি Views ব্যবহার করে জটিল কুয়েরি অপারেশনগুলো ডেটাবেস স্তরে অগ্রসর করতে পারেন এবং এটি ডেটার রিড-অনলি অ্যাক্সেস প্রদান করে। Views এবং EF-এর মডেল কনফিগারেশন করার মাধ্যমে আপনি ডেটাবেসের কাঠামো ও ডেটা ম্যানেজমেন্টকে আরও কার্যকরী এবং অপটিমাইজড করতে পারেন।

Content added By

Function Imports এবং Complex Query Handling

74
74

Entity Framework (EF) তে Function Imports এবং Complex Query Handling আপনাকে বিশেষ ধরনের ডেটাবেস অপারেশন এবং কুয়েরি পরিচালনা করতে সহায়তা করে। যখন আপনি ডেটাবেসে জটিল কুয়েরি করতে চান বা কোনো স্টোরড প্রোসিজার (Stored Procedure) বা ফাংশন ব্যবহার করতে চান, তখন EF-এর মাধ্যমে Function Imports এবং Complex Query Handling খুবই কার্যকর পদ্ধতি।


Function Imports কী?

Function Imports হল একটি Entity Framework ফিচার যা আপনাকে স্টোরড প্রোসিজার বা ডেটাবেস ফাংশন থেকে ডেটা রিটার্ন করতে সহায়তা করে। এই ফিচারের মাধ্যমে আপনি EF মডেল এবং স্টোরড প্রোসিজার বা ফাংশন এর মধ্যে একটি সরাসরি সংযোগ তৈরি করতে পারেন, যাতে আপনি কোডের মাধ্যমে ডেটাবেসের জটিল অপারেশনগুলো সঞ্চালন করতে পারেন।


Function Imports ব্যবহার করা

Function Imports এর মাধ্যমে আপনি ডেটাবেসে স্টোরড প্রোসিজার বা ফাংশনকে EF মডেলে এক্সপোজ করতে পারেন। এটি আপনাকে ডেটাবেসের ফাংশন বা প্রোসিজার কল করার সময় LINQ বা C# কোড ব্যবহার করার সুবিধা দেয়।

ফাংশন ইম্পোর্ট তৈরির পদ্ধতি:

  1. Visual Studio তে Function Import তৈরি করা:
    1. প্রথমে আপনার EDMX (Entity Data Model) ফাইল খুলুন।
    2. ডেটাবেস ফাংশন বা স্টোরড প্রোসিজারটি যে ফাংশনটিকে আপনি EF মডেলে অন্তর্ভুক্ত করতে চান, সেটি নির্বাচন করুন।
    3. Model Browser থেকে ফাংশনটি ড্র্যাগ করুন এবং মডেলে ড্রপ করুন।
    4. Function Import Wizard এর মাধ্যমে আপনি এই ফাংশন বা প্রোসিজারটি Entity Framework মডেলে অন্তর্ভুক্ত করতে পারবেন।
  2. Function Import এর সাথে LINQ ব্যবহার করা: একটি স্টোরড প্রোসিজার বা ফাংশন এর মাধ্যমে ডেটা বের করতে, আপনি LINQ ব্যবহার করতে পারেন। যেমন:

    var result = context.MyFunctionImport(param1, param2).ToList();
    

    এখানে MyFunctionImport হল আপনার স্টোরড ফাংশনের নাম, এবং param1, param2 হল ফাংশনের প্যারামিটার।

  3. Return Types: স্টোরড প্রোসিজার বা ফাংশন থেকে আপনি যা রিটার্ন করতে চান তার ওপর ভিত্তি করে আপনি Function Import এ সঠিক রিটার্ন টাইপ নির্বাচন করতে হবে। এটি হতে পারে:
    • Scalar Value (যেমন: int, string)
    • Complex Type (যেমন: Entity class এর লিস্ট)
    • Collection of Complex Types (যেমন: টেবিলের ডেটার তালিকা)

Complex Query Handling

Complex Query Handling বা জটিল কুয়েরি পরিচালনা হল ডেটাবেসে জটিল কুয়েরি চালানোর প্রক্রিয়া, যেখানে একাধিক টেবিলের সাথে সম্পর্কিত ডেটা বের করার জন্য লজিক্যাল কুয়েরি প্রয়োগ করা হয়। EF তে LINQ এবং SQL Query ব্যবহার করে কমপ্লেক্স কুয়েরি পরিচালনা করা যেতে পারে।


Complex Query Handling এর পদ্ধতি

  1. LINQ to Entities: LINQ to Entities Entity Framework এর মাধ্যমে সোজা কোডে SQL কুয়েরি লেখার মতো কাজ করতে সহায়ক। EF এর মাধ্যমে আপনি সহজেই একাধিক টেবিলের ডেটা ফিল্টার, গ্রুপ, বা অর্ডার করতে পারেন।

    উদাহরণ:

    var result = from p in context.Products
                 where p.Category == "Electronics"
                 orderby p.Price descending
                 select p;
    
  2. Join এবং Complex Filtering: EF তে আপনি JOIN ব্যবহার করে একাধিক টেবিল থেকে ডেটা একত্রিত করতে পারেন।

    উদাহরণ:

    var result = from p in context.Products
                 join c in context.Categories on p.CategoryId equals c.Id
                 where c.Name == "Electronics"
                 select new { p.Name, p.Price, c.Name };
    
  3. Group By এবং Aggregation: আপনি GroupBy এবং Aggregation Functions (যেমন Sum, Average, Min, Max) ব্যবহার করে ডেটা গ্রুপিং এবং অ্যাগ্রিগেট করতে পারেন।

    উদাহরণ:

    var result = from p in context.Products
                 group p by p.Category into g
                 select new
                 {
                     Category = g.Key,
                     TotalPrice = g.Sum(p => p.Price)
                 };
    
  4. Stored Procedures এবং Raw SQL Queries: Entity Framework ব্যবহার করে Stored Procedures বা Raw SQL Queries ব্যবহার করা যেতে পারে। এটি EF মডেল বা LINQ এর সীমাবদ্ধতাগুলি অতিক্রম করে আরও জটিল বা অপ্টিমাইজড কুয়েরি চালানোর সুযোগ দেয়।
    • Stored Procedure Call:

      var result = context.Database.SqlQuery<Product>("EXEC GetProductsByCategory @category", new SqlParameter("@category", "Electronics")).ToList();
      
    • Raw SQL Query:

      var result = context.Products.FromSqlRaw("SELECT * FROM Products WHERE Price > @price", new SqlParameter("@price", 100)).ToList();
      

Function Imports এবং Complex Queries এর মধ্যে পার্থক্য

  • Function Imports সাধারণত ডেটাবেসের স্টোরড প্রোসিজার বা ফাংশন কে Entity Framework মডেলে এক্সপোজ করার জন্য ব্যবহৃত হয়। এটি সরাসরি SQL বা stored procedure কল করতে সহায়তা করে।
  • Complex Queries সাধারণত LINQ বা Raw SQL Queries ব্যবহার করে একাধিক টেবিলের সাথে সম্পর্কিত ডেটা সংগ্রহ করার জন্য ব্যবহৃত হয়। এটি ডেটাবেস স্কিমার উপর ভিত্তি করে অত্যন্ত নমনীয় কুয়েরি তৈরি করার সুযোগ দেয়।

Entity Framework এর Function Imports এবং Complex Query Handling ব্যবহার করে আপনি আরও শক্তিশালী এবং নমনীয় ডেটাবেস অপারেশন করতে পারবেন। যেখানে Function Imports আপনাকে ডেটাবেস ফাংশন বা প্রোসিজার কল করার সুবিধা দেয়, সেখানে Complex Query Handling বিভিন্ন টেবিলের ডেটা একত্রিত করার জন্য জটিল কুয়েরি চালানোর সক্ষমতা প্রদান করে। EF-এ এই দুটি ফিচার ব্যবহার করে আপনি সহজে প্রোগ্রামিং পরিবেশে ডেটাবেসের কার্যক্রম পরিচালনা করতে পারেন।

Content added By
টপ রেটেড অ্যাপ

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

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

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