Entity Framework (EF) এ Asynchronous LINQ
কুয়েরি ব্যবহার করা ডেটাবেসের সাথে ইন্টারঅ্যাকশন করার সময় অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে। যখন আপনি সিঙ্ক্রোনাস কুয়েরি ব্যবহার করেন, তখন থ্রেডটি ডেটাবেস থেকে ডেটা ফিরে আসা না পর্যন্ত ব্লক হয়ে থাকে। কিন্তু Asynchronous LINQ
কুয়েরি ব্যবহারের মাধ্যমে এই থ্রেডটি ব্লক হতে বাধা পায়, ফলে আপনার অ্যাপ্লিকেশন দ্রুত এবং প্রতিক্রিয়া প্রদানকারী থাকে।
Asynchronous কুয়েরি ব্যবহার করলে, আপনি ডেটাবেস অপারেশনগুলিকে ব্যাকগ্রাউন্ড থ্রেডে চলে যেতে পারেন এবং ইউজারের ইন্টারফেস (UI) তে লেগে থাকা সময় কমিয়ে আনতে পারেন। এটি বিশেষভাবে গুরুত্বপূর্ণ, যখন আপনার অ্যাপ্লিকেশনটি অনেক ডেটা নিয়ে কাজ করছে বা আই/ও অপারেশন (যেমন নেটওয়ার্ক রিকুয়েস্ট বা ফাইল সিস্টেম অ্যাক্সেস) করছে।
Asynchronous
কুয়েরি করার জন্য EF Core Task
-এর উপর ভিত্তি করে বিভিন্ন async
এক্সটেনশন মেথড সরবরাহ করে, যেমন ToListAsync()
, FirstOrDefaultAsync()
, SingleOrDefaultAsync()
ইত্যাদি।
এখানে কিছু সাধারণ উদাহরণ দেওয়া হলো:
ToListAsync()
ব্যবহার করাToListAsync()
মেথডটি একটি অ্যাসিঙ্ক্রোনাস কুয়েরি অপারেশন যা ডেটাবেস থেকে ডেটা নিয়ে আসার জন্য ব্যবহার করা হয় এবং এটি একটি List
রিটার্ন করে।
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Threading.Tasks;
public async Task<List<Student>> GetAllStudentsAsync()
{
using (var context = new SchoolContext())
{
return await context.Students.ToListAsync();
}
}
এখানে, await
কীওয়ার্ড ব্যবহার করা হয়েছে যা ToListAsync()
মেথডটির পূর্ণতা না হওয়া পর্যন্ত থ্রেডটি ব্লক না হওয়ার নিশ্চয়তা দেয়।
FirstOrDefaultAsync()
ব্যবহার করাFirstOrDefaultAsync()
একটি অ্যাসিঙ্ক্রোনাস মেথড যা ডেটাবেস থেকে প্রথম রেকর্ডটি নিয়ে আসে (যদি থাকে), এবং যদি কোনো রেকর্ড না থাকে তবে null
রিটার্ন করে।
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
public async Task<Student> GetStudentByIdAsync(int studentId)
{
using (var context = new SchoolContext())
{
return await context.Students
.FirstOrDefaultAsync(s => s.StudentId == studentId);
}
}
এখানে FirstOrDefaultAsync()
মেথডটি একক রেকর্ড ফিরে আনে, তবে ডেটাবেস কুয়েরি আসার সময় এটি অ্যাসিঙ্ক্রোনাসভাবে কাজ করে।
SingleOrDefaultAsync()
ব্যবহার করাSingleOrDefaultAsync()
মেথডটি ব্যবহার করে, আপনি যদি জানেন যে কুয়েরির ফলস্বরূপ একটি মাত্র রেকর্ড থাকবে, তবে এটি ব্যবহার করা যেতে পারে। যদি একাধিক রেকর্ড থাকে, তবে এটি একটি InvalidOperationException
ফেলবে।
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
public async Task<Student> GetSingleStudentByIdAsync(int studentId)
{
using (var context = new SchoolContext())
{
return await context.Students
.SingleOrDefaultAsync(s => s.StudentId == studentId);
}
}
এটি ডেটাবেস থেকে একমাত্র রেকর্ডটি ফিরিয়ে আনে যা শর্ত পূরণ করে, এবং এটি অ্যাসিঙ্ক্রোনাসভাবে কাজ করে।
CountAsync()
এবং AnyAsync()
ব্যবহার করাCountAsync()
এবং AnyAsync()
মেথডগুলো ব্যবহার করে, আপনি অ্যাসিঙ্ক্রোনাসভাবে ডেটাবেসে রেকর্ডের সংখ্যা বের করতে পারেন অথবা কোনও শর্ত পূরণ করে এমন রেকর্ডের অস্তিত্ব পরীক্ষা করতে পারেন।
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
public async Task<int> GetStudentCountAsync()
{
using (var context = new SchoolContext())
{
return await context.Students.CountAsync();
}
}
এখানে, CountAsync()
ডেটাবেস থেকে সমস্ত Student
রেকর্ডের সংখ্যা অ্যাসিঙ্ক্রোনাসভাবে ফিরিয়ে আনবে।
public async Task<bool> IsStudentExistAsync(int studentId)
{
using (var context = new SchoolContext())
{
return await context.Students
.AnyAsync(s => s.StudentId == studentId);
}
}
এখানে AnyAsync()
মেথডটি চেক করবে যে studentId
এর কোনও Student
রেকর্ড ডেটাবেসে রয়েছে কিনা।
AsNoTrackingAsync()
ব্যবহার করাডিফল্টভাবে, EF Core ক্যাশিং এবং ট্র্যাকিংয়ের জন্য সমস্ত কুয়েরি ফলাফল ট্র্যাক করে। কিন্তু যদি আপনি শুধু রিড-অনলি অপারেশন করতে চান এবং আপনার ট্র্যাকিংয়ের প্রয়োজন না থাকে, তবে AsNoTrackingAsync()
ব্যবহার করা যেতে পারে। এটি কুয়েরি অপটিমাইজেশনে সাহায্য করে এবং পারফরম্যান্স বাড়ায়।
public async Task<List<Student>> GetAllStudentsNoTrackingAsync()
{
using (var context = new SchoolContext())
{
return await context.Students
.AsNoTracking()
.ToListAsync();
}
}
এটি ট্র্যাকিং ছাড়া ডেটাবেস থেকে সমস্ত Student
রেকর্ড অ্যাসিঙ্ক্রোনাসভাবে নিয়ে আসবে।
Asynchronous LINQ
কুয়েরি ব্যবহারের মাধ্যমে Entity Framework-এর ডেটাবেস অপারেশনগুলিকে আরও কার্যকর এবং স্কেলেবল করা যায়। এটি সিঙ্ক্রোনাস কুয়েরির তুলনায় অনেক বেশি উন্নত, কারণ এটি ডেটাবেস অপারেশন চলাকালীন ইউজার ইন্টারফেস ব্লক হওয়া থেকে রক্ষা করে এবং অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে। async
এবং await
কীওয়ার্ডের ব্যবহার আপনার কুয়েরিগুলোকে সুনির্দিষ্টভাবে অ্যাসিঙ্ক্রোনাস অপারেশন হিসেবে তৈরি করতে সাহায্য করে।
common.read_more