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

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

در آموزش، سرویس‌های حرفه‌ای برای روابط یک به چند در EF Core یاد می‌گیریم چگونه یک Service Layer برای مدیریت روابط یک به چند ایجاد کنیم. در قسمت قبلی مدل‌های Entity را طراحی کردیم. و در این قسمت یک Service Interface و Implementation برای عملیات CRUD پیاده‌سازی خواهیم کرد. و در قسمت بعدی نحوه استفاده از این سرویس  را بررسی خواهیم کرد تا دسترسی به داده‌های مرتبط تسهیل شود.

در بسیاری از سیستم‌های مدیریت اطلاعات، نیاز به ثبت و نگهداری اطلاعات تماس کاربران یا دانشجویان وجود دارد. در این مقاله، یک سرویس مدیریت تلفن دانشجویان را که با ASP.NET Core و Entity Framework Core پیاده‌سازی شده، بررسی خواهیم کرد. این سرویس یک رابطه یک به چند (One-to-Many) را بین دانشجویان (Student) و تلفن‌های آن‌ها (Phone) مدیریت می‌کند.

ساخت اینترفیس سرویس تلفن

این اینترفیس مجموعه‌ای از متدهای مورد نیاز برای مدیریت تلفن‌های دانشجویان را تعریف می‌کند.

public interface IPhoneService
{
    public Task<PhoneViewModel> GetPhoneByIdAsync(int id);
    public Task<List<PhoneViewModel>> GetPhonesByStudentId(int studentId);
    public Task<bool> CreatePhoneAsync(PhoneViewModel phoneVm);
    public Task<int> DeletePhoneAsync(int id);
    public IEnumerable<SelectListItem> GetPhoneType();
}
  • یک تلفن را بر اساس شناسه (ID) دریافت می‌کند : GetPhoneByIdAsync(int id)
  • تمام تلفن‌های مربوط به یک دانشجو را برمی‌گرداند : GetPhonesByStudentId(int studentId)
  • یک تلفن جدید را در پایگاه داده اضافه می‌کند : CreatePhoneAsync(PhoneViewModel phoneVm)
  • یک تلفن خاص را حذف می‌کند : DeletePhoneAsync(int id)

پیاده‌سازی PhoneService.cs

این کلاس، اینترفیس IPhoneService را پیاده‌سازی کرده و عملیات CRUD را مدیریت می‌کند.

دریافت یک تلفن بر اساس Id

/// <summary>
/// دریافت اطلاعات تلفن بر اساس شناسه
/// </summary>
/// <param name="id">شناسه تلفن</param>
/// <returns>مدل نمایشی تلفن</returns>
public async Task<PhoneViewModel> GetPhoneByIdAsync(int id)
{
    var Phone = await _context.phones
        .AsNoTracking()
        .ProjectTo<PhoneViewModel>(_mapper.ConfigurationProvider)
        .FirstOrDefaultAsync(x => x.Id == id);

    if (Phone == null)
        throw new KeyNotFoundException("Phone not found");

    return Phone;
}

دریافت تمام تلفن‌های یک دانشجو

/// <summary>
/// دریافت لیست تلفن‌ها بر اساس شناسه دانشجو
/// </summary>
/// <param name="studentId">شناسه دانشجو</param>
/// <returns>لیست مدل نمایشی تلفن‌ها</returns>
public async Task<List<PhoneViewModel>> GetPhonesByStudentId(int studentId)
{
    if (!await _context.students.AnyAsync(x => x.Id == studentId))
        throw new KeyNotFoundException("Student not found");

    var Phones = await _context.phones
        .ProjectTo<PhoneViewModel>(_mapper.ConfigurationProvider)
        .AsNoTracking()
        .Where(x => x.StudentId == studentId)
        .ToListAsync();

    return Phones ?? new List<PhoneViewModel>();
}

اضافه کردن یک تلفن جدید

/// <summary>
/// ایجاد تلفن جدید
/// </summary>
/// <param name="phoneVm">مدل نمایشی تلفن</param>
/// <returns>وضعیت موفقیت عملیات</returns>
public async Task<bool> CreatePhoneAsync(PhoneViewModel phoneVm)
{
    if (phoneVm == null || phoneVm.Id != 0)
        throw new ArgumentNullException("PhoneViewModel cannot be null");

    if (!await _context.students.AnyAsync(x => x.Id == phoneVm.StudentId))
        throw new KeyNotFoundException("Student not found");

    var Phone = _mapper.Map<Phone>(phoneVm);
    _context.Add(Phone);
    await _context.SaveChangesAsync();

    return true;
}

حذف یک تلفن خاص

/// <summary>
/// حذف تلفن بر اساس شناسه
/// </summary>
/// <param name="id">شناسه تلفن</param>
/// <returns>شناسه دانشجو</returns>
public async Task<int> DeletePhoneAsync(int id)
{
    var Phone = await _context.phones.FindAsync(id);

    if (Phone == null)
        throw new KeyNotFoundException("Phone not found");

    _context.phones.Remove(Phone);
    await _context.SaveChangesAsync();

    return Phone.StudentId;
}

مشاهده در آپارات یا یوتیوب

محتوای ویدیویی این صفحه در سایت قابل مشاهده است. اما اگر عادت دارید توی پلتفرم آپارات یا یوتیوب ویدیوها را مشاهده کنید، می‌توانید از دکمه‌های زیر استفاده کنید.

تماشای ویدیوی سرویس‌های حرفه‌ای برای روابط یک به چند در EF Core در آپارات و یوتیوب

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه سرویس‌های حرفه‌ای برای روابط یک به چند در EF Core در شبکه‌های اجتماعی

نظرات ارزشمند شما

نظرات شما برای ما ارزشمند است و آنها را میخوانیم و پاسخ میدهیم.

تصویر مرتضی فاضل

مثل همیشه بسیار عالی و روان، واقعا خسته نباشید

تصویر محمدرضا احدیان

مرسی دوست عزیز ❤️❤️❤️

تصویر MR.AliAsghar

سلام
دم شما گرم
شما به من یاد دادید که همیشه دوره های پولی بهتر از دوره های رایگان نیستند
خدا شما رو حفظ کنه.

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.