سرویس‌های حرفه‌ای برای روابط چند به چند در EF Core

تهران آی تی / برنامــه نویــسـی / سرویس‌های حرفه‌ای برای روابط چند به چند در EF Core

سرویس‌های حرفه‌ای برای روابط چند به چند در EF Core

در این آموزش به سرویس‌های حرفه‌ای برای روابط چند به چند در EF Core میپردازیم. نحوه پیاده‌سازی لایه سرویس در EF Core برای مدیریت روابط دانشجو-درس در Asp.Net Core را یاد می‌گیرید. این راهنما شامل عملیات CRUD، روابط چند به چند است.

در این آموزش، به بررسی سرویس StudentCourseService میپردازیم. این سرویس با استفاده از  ابزارهایی مانند AutoMapper، فرآیندهای CRUD را ساده سازی میکند. سرویس StudentCourseService با ارائه متدهای استاندارد برای مدیریت روابط دانشجو-درس، توسعه را تسهیل میکند. با به کارگیری EF Core و AutoMapper، این سرویس هم عملکرد بهینه و هم خوانایی کد را تضمین میکند.

پیاده‌سازی روابط چند به چند در EF Core

پیاده‌سازی روابط چند به چند در EF Core

ساخت اینترفیس جدول واسط – IStudentCourseService

public interface IStudentCourseService
{
Task AddStudentToCourseAsync(int studentId, int courseId);
Task RemoveStudentFromCourseAsync(int studentId, int courseId);
Task<bool> IsStudentEnrolledAsync(int studentId, int courseId);
Task<List<CourseViewModel>> GetCoursesByStudentAsync(int studentId);
Task<List<StudentViewModel>> GetStudentsByCourseAsync(int courseId);
Task<List<StudentViewModel>> GetStudentsNotInCourseAsync(int courseId);
Task<List<CourseViewModel>> GetCoursesNotInStudentsAsync(int studentId);
}

  • ثبت نام دانشجو در یک دوره – AddStudentToCourseAsync
  • لغو ثبتنام دانشجو از دوره – RemoveStudentFromCourseAsync
  • بررسی وجود رابطه ثبتنام – IsStudentEnrolledAsync
  • دریافت دورههای یک دانشجو – GetCoursesByStudentAsync
  • دریافت دانشجویان یک دوره – GetStudentsByCourseAsync
  • دریافت دانشجویان خارج از یک دوره – GetStudentsNotInCourseAsync
  • دریافت دورههای بدون ثبتنام دانشجو – GetCoursesNotInStudentsAsync

پیاده‌سازی سرویس StudentCourseService

  • ثبت‌نام دانشجو در یک درس. در صورت عدم ثبت نام.

public async Task AddStudentToCourseAsync(int studentId, int courseId)
{
bool exists = await _context.StudentCourses
.AnyAsync(sc => sc.StudentId == studentId && sc.CourseId == courseId);
if (!exists)
{
var student = await _context.students.FirstOrDefaultAsync(s => s.Id == studentId);
var course = await _context.courses.FirstOrDefaultAsync(c => c.Id == courseId);
if (student == null || course == null)
throw new InvalidOperationException("Student or Course not found.");
var studentCourse = new StudentCourse
{
StudentId = studentId,
CourseId = courseId,
Student = student,
Course = course
};
_context.StudentCourses.Add(studentCourse);
await _context.SaveChangesAsync();
}
}

  • حذف ثبت‌نام دانشجو از یک درس.

public async Task RemoveStudentFromCourseAsync(int studentId, int courseId)
{
var relation = await _context.StudentCourses
.FirstOrDefaultAsync(sc => sc.StudentId == studentId && sc.CourseId == courseId);
if (relation != null)
{
_context.StudentCourses.Remove(relation);
await _context.SaveChangesAsync();
}
}

  • بررسی وضعیت ثبت‌نام قبل از عملیات.

public async Task<bool> IsStudentEnrolledAsync(int studentId, int courseId)
{
return await _context.StudentCourses
.AnyAsync(sc => sc.StudentId == studentId && sc.CourseId == courseId);
}

  • دریافت لیست دروس انتخاب شده یک دانشجو خاص.

public async Task<List<CourseViewModel>> GetCoursesByStudentAsync(int studentId)
{
return await _context.StudentCourses
.Where(sc => sc.StudentId == studentId)
.Select(sc => sc.Course)
.AsNoTracking()
.ProjectTo<CourseViewModel>(_mapper.ConfigurationProvider)
.ToListAsync();
}

  • دریافت لیست دانشجویان یک درس خاص.

public async Task<List<StudentViewModel>> GetStudentsByCourseAsync(int courseId)
{
return await _context.StudentCourses
.Where(sc => sc.CourseId == courseId)
.Select(sc => sc.Student)
.AsNoTracking()
.ProjectTo<StudentViewModel>(_mapper.ConfigurationProvider)
.ToListAsync();
}

  • دریافت لیست دانشجویان یک درس خاص را انتخاب نکرده اند.

public async Task<List<StudentViewModel>> GetStudentsNotInCourseAsync(int courseId)
{
return await _context.students
.Where(s => !(s.StudentCourses != null && s.StudentCourses.Any(sc => sc.CourseId == courseId)))
.AsNoTracking()
.ProjectTo<StudentViewModel>(_mapper.ConfigurationProvider)
.ToListAsync();
}

  • دریافت لیست دروس انتخاب نشده یک دانشجو خاص.

public async Task<List<CourseViewModel>> GetCoursesNotInStudentsAsync(int studentId)
{
return await _context.courses
.Where(s => !(s.StudentCourses != null && s.StudentCourses.Any(sc => sc.StudentId == studentId)))
.AsNoTracking()
.ProjectTo<CourseViewModel>(_mapper.ConfigurationProvider)
.ToListAsync();
}

ویژگی‌های کلیدی StudentCourseService

  • عملیات ناهمزمان : با استفاده از async/await برای عملکرد بهتر.
  • مدیریت روابط چند به چند : با استفاده از موجودیت واسط StudentCourse در EF Core.
  • انتساب خودکار (AutoMapper) : تبدیل آسان موجودیت‌ها به مدل‌های نمایشی (ViewModel).

چرا از این سرویس استفاده کنیم؟

  • مقیاس‌پذیری : مناسب برنامه‌های با حجم بالا.
  • کدنویسی تمیز : جداسازی منطق کسبی از دسترسی به داده‌ها.
جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد