کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش قراردادهای نوشتاری در Entity Framework Core

قراردادهای نوشتاری در Entity Framework Core

آموزش قراردادهای نوشتاری در Entity Framework Core

قراردادهای نوشتاری قوانینی هستند که EF با استفاده از آن ها مدلی براساس domain class های پروژه می سازد. در بخش ساخت اولین اپلیکیشن با EF Core، دیتابیس را از روی کلاس های domain و context بدون config های اضافه ساختیم، چرا که کلاس های domain از این قراردادهای نوشتاری پیروی می کردند.

Entity ها و context زیر را در نظر بگیرید:


public class Student
{
    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime DateOfBirth { get; set; }
    public byte[] Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
    public int GradeId { get; set; }
    public Grade Grade { get; set; }
}
public class Grade
{
    public int Id { get; set; }
    public string GradeName { get; set; }
    public string Section { get; set; }
    public IList< Student > Students { get; set; }
}
public class SchoolContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    { 
        optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;");
    }
    public DbSet< Student > Students { get; set; }
}

بیایید EF Core convention ها را بفهمیم و ببینیم چگونه EF Core API دیتابیس را از روی entity های بالا می سازد.

Schema

EF Core همه ی database object ها را به طور پیش فرض در dbo schema می سازد.


dbo schema

جدول

EF Core جدول های دیتابیس را برای همه ی DbSet property های درون context class می سازد و نامی مشابه نام property به آن ها می دهد. همچنین برای entity هایی که به شکل DbSet property اضافه نشده اند اما از بصورت property درون DbSet entitiy های دیگر استفاده شده اند، جدول ساخته می شود. برای مثال بالا، جدول Students را برای DbSet property که در کلاس SchoolContext تعریف شده می سازد و جدول Grade را برای Grade property که درون کلاس Student تعریف شده می سازد. با وجود اینکه کلاس SchoolContext مستقیما DbSet property ندارد.


جدول های ایجاد شده با EF Core

ستون

به طور پیش فرض EF Core برای همه ی scaler property های هر موجودیت ستونی هم نام با آن می سازد و از رفرنس ها و collection property های درون کلاس ها برای ایجاد ارتباط بین جدول های مختلف دیتابیس استفاده می کند.


ستون های ایجاد شده با EF Core

نوع داده ستون ها

نوع داده هر ستون در جدول ها به این بستگی دارد که provider چگونه نوع داده های C# را به نوع داده های دیتابیس نگاشت کرده است. جدول زیر نگاشت بین انواع داده در C# و SQL Server را نشان می دهد:

C# Data Type
Mapping to SQL Server Data Type
int
int
string
nvarchar(Max)
decimal
decimal(18,2)
float
real
byte[]
varbinary(Max)
datetime
datetime
bool
bit
byte
tinyint
short
smallint
long
bigint
double
float
char
No mapping
sbyte
No mapping (throws exception)
object
No mapping

ستون های Nullable

EF Core برای همه ی انواع داده reference base و انواع داده هایprimitive که nullable هستند مثل string، Nullable و decimal?، ستون های null می سازد.

ستون های NotNull

EF Core برای همه ی property هایی که کلید اصلی هستند، و انواع داده اصلی مثل int، float، decimal، DateTime و ... ستون های NotNull می سازد.

کلید اصلی (Primary Key)

EF Core به ازای property هایی که نامشان Id یا Id است (حساس به بزرگ و کوچک بودن حروف نیست) کلید اصلی می سازد. برای مثال، اگر کلاس Student حاوی پراپرتی هایی با نام های id، ID، iD، Id، studentid، StudentId، STUDENTID، یا sTUdentID باشد، EF Core ستونی به عنوان کلید اصلی در جدول Students می سازد.


کلید اصلی ایجاد شده با EF Core

کلید خارجی (Foreign Key)

EF Core API برای هر navigation property درون هر موجودیت یک ستون کلید خارجی می سازد. نام ستون ها براساس یکی از الگوهای زیر انتخاب می شود:


  • < Reference Navigation Property Name >Id
  • < Reference Navigation Property Name >< Principal Primary Key Property Name >

در مثال قبل، EF Core ستون کلید خارجی GradeId را در جدول Students می سازد:


کلید خارجی ایجاد شده با EF Core

جدول زیر نام ستون کلید خارجی را براساس نام property هایی که به آن رفرنس داده اند و نام کلید اصلی ها، نشان می دهد:

نام Property ارجاع شده در موجودیت وابسته
نام Property کلید اصلی در موجودیت وابسته
نام Property کلید اصلی در موجودیت اصلی
نام کلید خارجی در دیتابیس
Grade
GradeId
GradeId
GradeId
Grade
-
GradeId
GradeId
Grade
-
Id
GradeId
CurrentGrade
CurrentGradeId
GradeId
CurrentGradeId
CurrentGrade
-
GradeId
CurrentGradeGradeId
CurrentGrade
-
Id
CurrentGradeId
CurrentGrade
GradeId
Id
GradeId

Index

EF Core یک ایندکس خوشه ای روی ستون های کلید اصلی و یک ایندکس غیرخوشه ای روی ستون های کلید خارجی می سازد.

در بخش بعد درمورد قراردادهای نوشتاری برای تعیین ارتباط بین جدول ها صبحت می کنیم.

1398/06/22 3327 793
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...