چگونه کلاسهای Domain یا دامنه را برای ایجاد دیتابیس به روش CodeFirst پیکربندی کنیم ؟ Data Annotation Attribute چیست و در EF Core چه کاربردی دارد؟ روش Fluent API چیست؟
درود ، من آرزو ابراهیمی هستم برنامه نویس ASP.NET Core ، و با یک مقاله آموزشی دیگر از فصل آموزش Entity Framework Core در خدمت شما دوستان هستم. اگر به دنبال پاسخ سوالات بالا هستید این مقاله آموزشی از سری مقالات آموزش asp.net core را از دست ندهید.
سرفصلهای پست
پیکربندی کلاس های دامنه (Domain Classes) در EF Core
در Entity Framework Core دو روش برای پیکربندی کلاسهای دامنه (Domain Classes) یا کلاسهای Entity وجود دارد (مشابه EF 6)
- با استفاده از Data Annotation Attribute
- با استفاده از روش Fluent API
روش اول : Data Annotation Attributes
در این روش برای پیکربندی از attribute ها استفاده میکنیم. این اتریبوتها بر روی کلاسها و property های کلاس اعمال میشوند و به این ترتیب Domain Class ها پیکربندی میشوند. به این نکته توجه داشته باشید که برای استفاده از Data Annotation Attribute ها باید فضای نام using System.ComponentModel.DataAnnotations
را به فایل Domain Class اضافه کنید.
مثال زیر چگونگی استفاده از این attribute ها در یک Domain Class را نشان میدهد:
[Table("StudentInfo")] public class Student { public Student() { } [Key] public int SID { get; set; } [Column("Name", TypeName="ntext")] [MaxLength(20)] public string StudentName { get; set; } [NotMapped] public int? Age { get; set; } public int StdId { get; set; } [ForeignKey("StdId")] public virtual Standard Standard { get; set; } }
در مثال بالا از اتریبیوت های [Table(“StudentInfo”)] ، [Key] ، [Column(“Name”, TypeName=”ntext”)] ، [MaxLength(20)] ، [NotMapped] ، [ForeignKey(“StdId”)] استفاده شده است که در جلسات آموزشی بعدی با تک تک این Attribute ها آشنا خواهیم شد. هر کدام از این Attribute ها به ما کمک میکنند تا Domain Class ها را برای تبدیل به جداول دیتابیس پیکربندی کنیم.
[box type=”info”]نکته : Data Annotation Attribute ها در EF Core کاملا مشابه EF 6 هستند.
[/box]روش دوم : Fluent API
Fluent API یکی دیگر از روشها برای پیکربندی Domain Classها در EF Core هست. Fluent API براساس الگوی Fluent Interface است، به این صورت که نتیجه به صورت زنجیرهی متد ها (method chaining) بدست میآید.
در مثال زیر پیکربندی Domain Class به روش Fluent API انجام شده است ، همین طور که در کد زیر مشاهده میکنید برای پیکربندی کلاس های دامنه (Domain Class) به روش Fluent API باید سراغ کلاس Context پروژه بریم سپس متد OnModelCreating را Override کرده و پیکربندی های لازم را داخل متد OnModelCreating انجام دهیم.
به کدهای داخل متد OnModelCreating دقت کنید ، در روش Fluent API از متدهای Entity ، Property ، HasColumnName HasDefaultValue و IsRequired پشت سرهم به صورت یک زنجیر استفاده شده است و این یعنی روش Fluent API 😊
modelBuilder.Entity<Student>() .Property(s => s.StudentId) .HasColumnName("Id") .HasDefaultValue(0) .IsRequired();
در دوره آموزش پروژه محور asp.net core که برگزار کردیم ، تعدادی از دانشجویان دوره این سوال براشون پیش اومده بود که کدوم یکی از این دو روش بهتره و از کدوم روش برای پیکربندی کلاس های دامنه یا Domain Classes استفاده کنیم ؟ این سوال را در این مقاله مطرح کردم چون شاید این سوال برای شما دوستانی که این مقاله را مطالعه میکنید هم پیش بیاید .
پاسخ این سوال این هست که بهتره از هر دو روش در کنار هم استفاده بشه ، یعنی یه جاهایی راحت تر هستیم که از روش Data Annotation Attribute استفاده کنیم و یه جاهایی هم این روش کم میاره و بهتره بریم سراغ روش Fluent API .
بسیار خب در این جلسه آموزشی تا حدودی با روش Data Annotation Attribute و Fluent API در پیکربندی Domain Class ها آشنا شدیم در مقالات آموزشی بعدی این دو روش را به صورت مفصل بررسی خواهیم کرد. اگر سوالی داشتید حتما در قسمت نظرات مطرح کنید پاسخگوی شما خواهیم بود.
یک پاسخ
سلام
من با MVC asp.net core 3.1 کار میکنم ولی مشکلی که دارم این هست که identity به صورت پیشفرض Fluent API هست
و من میخوام که به صورت prop باشه که ساده تر هست برای من