مشخصات مقاله
-
699
-
0.0
-
5622
-
0
-
0
آموزش Fluent API در Entity Framework Core
آموزش Fluent API در Entity Framework Core
آموزش Configuration ها در Entity Framework
Entity Framework Fluent API برای config کلاس های دامین استفاده می شود و براساس الگوی Fluent Interface است، که در آن نتیجه به صورت زنجیره ای از متدها (method chaining) شکل می گیرد.
در EF Core، کلاس ModelBuilder به عنوان یک Fluent API عمل می کند. با استفاده از آن می توان موارد زیادی رو کلاس ها config کرد و نسبت به annotation attribute ها آزادی عمل بیشتری داریم.
تنظیمات به وسیله این API روی سه جنبه مدل اعمال می شود:
- Model Configuration: یک مدل EF برای mapping های دیتابیس config می کند. شمای پیش فرض، DB function ها، data annotation attribute و موجودیت های اضافه را طوری کانفیگ می کند که در mapping قرار نکیرند.
- Entity Configuration: نگاشت موجودیت به جدول ها و روابط آن ها را config می کند، مثلا کلید اصلی، AlternateKey، ایندکس، نام جدول، روابط یک به یک، یک به چند و چند به چند و ...
- Property Configuration: نگاشت property ها به ستون ها را config می کند. مثلا نام ستون، مقدار پیش فرض، nullable بودنشان، کلید خارجی، نوع داده، ستون concurrency و ...
جدول زیر متدهای مهم هر یک از این configuration ها را معرفی می کند:
Fluent API Configurations
برای استفاده از این توابع، متد OnModelCreating را override کنید و از یک پارامتر ModelBuilder از نوع ModelBuilder برای تنظیم کلاس های دامین استفاده کنید.
public class SchoolDBContext: DbContext
{
public DbSet< Student > Students { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//Write Fluent API configurations here
//Property Configurations
modelBuilder.Entity< Student >()
.Property(s => s.StudentId)
.HasColumnName("Id")
.HasDefaultValue(0)
.IsRequired();
}
}
در مثال بالا، ModelBuilder برای تنظیم property به صورت فراخوانی چند متد به دنبال هم استفاده شده و StudentId property در موجودیت Student را config کرده. نام ستون، مقدار پیش فرض، و الزام ورود مقدار را با IsRequired در یک دستور تعیین کرده است. دستور کاملا خوانا است و نوشتن آن زمان کمی می گیرد. کدهای زیر را مقایسه کنید:
//Fluent API method chained calls
modelBuilder.Entity< Student >()
.Property(s => s.StudentId)
.HasColumnName("Id")
.HasDefaultValue(0)
.IsRequired();
//Separate method calls
modelBuilder.Entity< Student >().Property(s => s.StudentId).HasColumnName("Id");
modelBuilder.Entity< Student >().Property(s => s.StudentId).HasDefaultValue(0);
modelBuilder.Entity< Student >().Property(s => s.StudentId).IsRequired();
توجه: تنظیماتی که با استفاده از Fluent API انجام می دهید اولویت بیشتری نسبت به data annotation attribute ها دارند.
در بخش بعد نحوه تعیین رابطه یک به چند را به کمک Fluent API آموزش می دهیم.