دوره آموزش جامع Entity Framework پیکربندی کلاس های مدل با Fluent API

گروه نرم افزاری هیلتن
گروه نرم افزاری هیلتن
در قسمت قبل ما درباره DataAnnotations ها حرف زدیم و اینکه چگونه کانفیگوریشن های مربوط به فیلدها رو انجام بدید.اما مشکلی که هست ا ...
در قسمت قبل ما درباره DataAnnotations ها حرف زدیم و اینکه چگونه کانفیگوریشن های مربوط به فیلدها رو انجام بدید.اما مشکلی که هست این هست که استفاده از DataAnnotations ها در کلاس موجودیت باعث شلوغی بیش از حد و سردرگم شدن برنامه نویس میشه و هر چه این کلاس دارای فیلد ها و پروپرتی های بیشتری باشه این ازدحام و شلوغی بیشتر میشه . بنوعی Dirty Code.برای رفع این مشکل ما باید یک کلاس جداگانه برای اینکار بزنیم و تمام این DataAnnotations ها و کانفیگ هارو در اون کلاس انجام بدیم نه در کلاس موجودیت ! به این روش Fluent API گویند که روشی برای پیکربندی کلاس های مدل می‌باشد و می‌توانند و استفاده از این روش باعث میشود که کدها خوانایی بیشتری داشته باشند و تنظیمات را داخل یک بخش مجزا به نام Fluent API انجام دهیم. به همین منظور در قسمت سولوشن برنامه روی نام پروژه راست کلیک میکنیم و یک کلاس جدید به نام StudentConfig ایجاد میکنیم . برای کانفیگ کردن یک using به نام ModelConfiguration تعریف میکنیم.سپس به صورت زیر جلوی نام کلاس StudentConfig یک دونقطه : میزنیم تا از کلاس EntityTypeConfiguration ارث بری کند ، خود EntityTypeConfiguration هم برای کانفیگور کردن موجودیت Student هست. Class StudentConfig : EntityTypeConfiguration یک کلاس سازنده تعریف میکنیم . حالا کانفیگ هایی که تو کلاس موجودیت اعمال کردیم رو دونه دونه پاک میکنیم و میبریم داخل کلاس StudentConfig و داخل سازنده ازشون استفاده میکنیم.الان همه قسمت ها رو تو کلاس کانفیگور نوشتیم خوانایی برنامه بیشتر شد ، اگه DataAnnotations ها تو کلاس موجودیت نوشته بشن از طرفی باعث شلوغی بیش از حد میشن و خوانایی برنامه میاد پایین اما از طرف دیگه باعث میشه زمانی که از کلاس موجودیت (مثلا Student) آبجکت ساخته بشه ، اون کانفیگ ها یا تنظیمات مدام دارن اعمال میشن در نتیجه سرعت اجرای برنامه بشدت میاد پایین چون هی میخواد اون تنظیمات رو اعمال کنه اما اگه بصورت Fluent Api و داخل یک کلاس کانفیگوریشن بنویسید باعث میشه وقتی که مدل یا همون Context تون ساخته میشن این تنظیمات فقط یکبار اعمال بشن و دیگه موقع نمونه سازی از کلاس موجودیت ، مدام تنظیمات اعمال نشود .... نکته ی دیگه اینکه تو پروژه های واقعی مثل قسمت های قبلی باید Class Library بزنید که یه پوشه به اسم Entity برای موجودیت هاتون داشته باشید و یک پوشه دیگه به اسم Entity Configuration برای کانفیگ ها و تنظیمات تون .برای اعمال کردن این کانفیگ ها داخل dbcontext ، متد OnModelCreating رو یکبار override میکنیم و داخل این متد دستورات fluent را مینویسیم و با استفاده از شی modelBuilder تنظیمات مورد نظر را اعمال میکنیم.

همه توضیحات ...