Fluent API چیست؟
در روش کد فرست یا Code First بصورت پیش فرض کلاس ها با استفاده از مجموعه ای از قراردادهای گنجانده شده در EF به جداول نگاشت می شود. به طور مثال بصورت پیش فرض در روش کد فرست در EF Core یک پراپرتی از نوع string به varchar(MAX) در دیتابیس نگاشت می شود.با این حال، گاهی اوقات نمیتوانیم یا نمیخواهیم از آن قراردادها پیروی کنیم و نیاز داریم که موجودیتها را به چیزی غیر از آنچه که قراردادها دیکته میکنند، نگاشت کنیم.
برای آموزش کد فرست در EF Core می توانید از این لینک استفاده کنید.
برای این که در EF Core موجودیت ها را به چیزی غیر از قراردادهای پیش فرض نگاشت کنیم دو راه وجود دارد:
- استفاده از Annotation ها در EF Core
- استفاده از Fluent API در EF Core
چرا در روش کد فرست نباید از annotation ها در EF Core استفاده کنیم؟
- استفاده از annotation ها باعث کثیفی کد خواهند شد
- استفاده از annotation ها خوانایی کد را پایین می آورد
- استفاده از annotation ها توسعه و نگه داری کد را سخت خواهد کرد
چرا در روش کد فرست باید از Fluent API در EF Core استفاده کنیم؟
- استفاده از Fluent API ها خوانایی کد را بالا می برد
- استفاده از Fluent API ها باعث تسریع روند پروژه خواهد شد
- استفاده از Fluent API ها توسعه و نگه داری کد را آسان می کند
- انواع سناریوهای نگاشت را می توان با Fluent API انجام داد
به طور کل annotation ها فقط زیرمجموعه ای از عملکرد Fluent Api را پوشش می دهند، بنابراین سناریوهای نگاشتی وجود دارد که با استفاده از annotation نمی توان به آنها دست یافت که این سناریو ها باید با Fluent Api ها نگاشت شوند.
نحوه ایجاد و نگاشت مدل در EF Core با استفاده از کلاس ModelBuilder
Entity Framework Core از مجموعه ای از قراردادها برای ساخت مدلی بر اساس ساختار کلاس های ما استفاده می کند. Fluent API از کلاس ModelBuilder می تواند پیکربندی های اضافی را برای تکمیل یا نادیده گرفتن آنچه بر اساس قرارداد های پیش فرض در EF Core است،اعمال کند.
استفاده از Fluent API برای نگاشت یک مدل
برای استفاده از Fluent API باید متد OnModelCreating را override و از ModelBuilder API برای نگاشت مدل خود استفاده کنیم. Fluent API قوی ترین روش نگاشت است و اجازه می دهد تا پیکربندی بدون تغییر کلاس های موجودیت مشخص شود. پیکربندی Fluent API بالاترین اولویت را دارد و Annotation را لغو می کند.
using Microsoft.EntityFrameworkCore;
namespace EFModeling.EntityProperties.FluentAPI.Required;
internal class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
#region Required
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.IsRequired();
}
#endregion
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
نگاشت گروهی در EF Core
برای کاهش اندازه متد OnModelCreating، می توان تمام پیکربندی یک موجودیت را در یک کلاس جداگانه که اینترفیس IEntityTypeConfiguration<TEntity> را پیاده سازی کرده است استخراج کرد.
public class BlogEntityTypeConfiguration : IEntityTypeConfiguration<Blog>
{
public void Configure(EntityTypeBuilder<Blog> builder)
{
builder
.Property(b => b.Url)
.IsRequired();
}
}
سپس می توان تمام پیکربندی های مشخص شده که اینترفیس IEntityTypeConfiguration را در یک اسمبلی مشخص پیاده سازی کرده اند را اعمال کرد.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(typeof(BlogEntityTypeConfiguration).Assembly);
}
آموزش Fluent API در EF Core و Asp.Net Core
ما در این آموزش در یک پروژه MVC از نوع asp core 6 خواهیم ساخت و سپس با روش کد فرست در EF Core یک دیتابیس خواهیم ساخت و برای نگاشت entity های خود به جداول SQL از Fluent API استفاده خواهیم کرد.
سر فصل های آموزش Fluent API در EF Core در روش کد فرست
- نحوه ایجاد یک Fluent API و آشنایی با ساختار آن
- نگاشت گروهی موجودیت ها در Fluent API
- بررسی انواع متدهای Fluent API و کاربردهای آن
- نحوه اعمال کردن ایندکس ها بوسیله Fluent API
- ایجاد رابطه یک به یک(One-to- One) با استفاده از Fluent APi
- ایجاد رابطه یک به چند(One-to-Many) با استفاده از Fluent APi
- ایجاد رابطه چند به چند(Many -to-Many) با استفاده از Fluent APi
- ایجاد رابطه Self Relation یا Self-Referencing با استفاده از Fluent API
- انجام Seed Data در Fluent API
- آشنایی با مفهوم Principal key و کاربرد آن در EF Core
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید