نحوه پیوستن به جداول حسابداری و دوره در C# EF Core

مقدمه
در این آموزش ، چگونگی پیوستن به آن را به طور مؤثر بررسی خواهیم کرد AccountingEntity
وت PeriodEntity
هنگام استفاده از هسته Framework Core در C#. هدف فیلتر کردن است AccountingEntity
بر اساس یک Group
پارامتر ضمن اطمینان از Period
خاصیت به درستی از Periods
جدول این یک سناریوی مشترک هنگام برخورد با جداول پایگاه داده مرتبط در یک وضعیت طرح ثابت است.
درک رابطه
ما با دو جدول کار می کنیم: periods
وت accounting
بشر کلید اصلی در periods
جدول ترکیبی از group
وت id
، در حالی که accounting
جدول periodid
که مطابق با id
در periods
بشر رابطه این جداول با تطبیق برقرار می شود accounting.periodid
با periods.id
، اگرچه هیچ کلید خارجی در این طرح تعریف نشده است.
تصحیح پیکربندی Framework Entity
برای تنظیم رابطه در هسته Framework Core ، ما اصلاح خواهیم کرد OnModelCreating
روش در FinanceDbContext
بشر پس از periodid
در AccountingEntity
اشاره به id
در PeriodEntity
، ما می توانیم این رابطه را به روش زیر تعریف کنیم:
modelBuilder.Entity()
.HasOne(a => a.Period)
.WithMany()
.HasForeignKey(a => a.PeriodId) // Defines the foreign key relationship here
.OnDelete(DeleteBehavior.Restrict); // Optional: define delete behavior
در این پیکربندی ، ما استفاده می کنیم WithMany()
به جای WithOne()
بشر این به این دلیل است که هر کدام PeriodEntity
می تواند با چندگانه همراه باشد AccountingEntity
ورودی ها ، نمایانگر یک رابطه یک به بسیاری.
اجرای روش GetAll
اکنون که روابط را به درستی تنظیم کرده ایم ، می توانیم به اجرای آن بپردازیم GetAll
روش در مخزن:
public IQueryable GetAll(string group)
{
return DatabaseContext.Accountings
.Include(a => a.Period) // Eager loading the related Period entity
.Where(a => a.Period.Group == group); // Filter by group
}
در این روش ، ما استفاده می کنیم Include
برای انجام بارگذاری مشتاق ، اطمینان از آن Period
خاصیت هر یک AccountingEntity
پرجمعیت است در Where
فیلتر سپس بررسی می کند که آیا Group
از Period
با پارامتر ورودی مطابقت دارد.
پایان
با پیکربندی صحیح روابط در هسته Framework Entity و استفاده از بارگذاری مشتاق در پرس و جو ، می توانیم به طور موثری بازیابی کنیم AccountingEntity
سوابق که بر اساس مرتبط فیلتر می شوند Period
ویژگی ها این رویکرد از نگه داشتن مدل های تمیز و کارآمد از سربار از ویژگی های لیست موجود در موجودات شما جلوگیری می کند.
سوالات متداول (متداول)
چگونه می توانم روابط را در هسته چارچوب Entity تنظیم کنم؟
از OnModelCreating
روش تعریف کلیدهای اولیه ، روابط و محدودیت های بین موجودات. بارگذاری مشتاق می تواند با استفاده از .Include()
روش
آیا می توانم از بارگیری کل اشیاء مرتبط جلوگیری کنم؟
بله ، در صورت لزوم وجود اشخاص کامل ، می توانید از طرح ریزی برای انتخاب تنها خواص خاص استفاده کنید. استفاده کردن .Select()
برای ایجاد انواع ناشناس یا DTO.
اگر بخواهم روی چندین ستون فیلتر کنم چه می شود؟
شما می توانید زنجیر اضافی کنید .Where()
بندها برای فیلتر کردن بر اساس سایر خصوصیات در صورت لزوم ، با استفاده از اپراتورهای منطقی برای ترکیب شرایط.