آموزش Code First Data Annotations

آموزش Code First Data Annotations

بسم الله الرحمن الرحیم

 برای مشاهده بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

آموزش Code First

بخش اول

Data Annotations

در طراحی پایگاه داده به وسیله Entity Framework  در MVC برای مشخص کردن خصوصیت های جداول و فیلدها می بایست از خاصیتی به نام Data Annotations استفاده کنید. کار با این خصوصیت بسیار ساده می باشد.
ما دو کلاس را برای پروژه خود نیاز داریم، این دو کلاس را با نام های Blog.cs و Post.cs در فولدر Model پروژه MVC خود ایجاد می کنیم و کد های زیر را در آن ها قرار می دهیم.
 

 

public class Blog 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string BloggerName { get; set;} 
    public virtual ICollection<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public int BlogId { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
}
 

بسم الله الرحمن الرحیم

 برای مشاهده بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

آموزش Code First

بخش اول

Data Annotations

در طراحی پایگاه داده به وسیله Entity Framework  در MVC برای مشخص کردن خصوصیت های جداول و فیلدها می بایست از خاصیتی به نام Data Annotations استفاده کنید. کار با این خصوصیت بسیار ساده می باشد.
ما دو کلاس را برای پروژه خود نیاز داریم، این دو کلاس را با نام های Blog.cs و Post.cs در فولدر Model پروژه MVC خود ایجاد می کنیم و کد های زیر را در آن ها قرار می دهیم.
 

 

public class Blog 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string BloggerName { get; set;} 
    public virtual ICollection<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public int BlogId { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
}

 

Key 

تعیین کلید اصلی جداول

Entity Framework برای ایجاد کلید اصلی جدول شما در دیتابیس، در مدلی که طراحی کردید به دنبال نام Id و یا نام کلاس شما به علاوه کلمه Id (مثلا BlogId) می گردد، هر یک از این دو پراپرتی در صورتی که در کلاس شما وجود داشته باشد تبدیل به کلید اصلی در جدول پایگاه داده می شود.

در صورتی که هیچ یک از این دو کلمه در کلاس مدل شما وجود نداشته باشد Entity Framework یکexception  برای این مورد throw می کند. برای حل این مشکل کافی است از خاصیتی به نام [Key]در بالای فیلد کلید خود استفاده کنید.
مثلا ما می خواهیم در اینجا نام کلید اصلی خود راPrimaryTrackingKey قرار دهیم پس باید کد خود را به صورت زیر تغییر دهیم.

public class Blog 
{ 
    [Key] 
    public int PrimaryTrackingKey { get; set; } 
    public string Title { get; set; } 
    public string BloggerName { get; set;} 
    public virtual ICollection<Post> Posts { get; set; } 
}

اگر شما از Entity Framework  و روش Code First  برای ایجاد دیتابیس استفاده کنید، جدول Blog یک کلید اصلی با نام PrimaryTrackingKey

خواهد داشت که به صورت پیش فرض Identity تعریف خواهد شد

 

 

Key Data Annotations

 

 

Composite keys

کلیدهای ترکیبی

ممکن است شما بخواهید  برای جدول خود دو فیلد را باهم به عنوان یک کلید اصلی در نظر بگیرید:
مثلا در اینجا ما می خواهیمPassportNumber  را باIssuingCountry  به عنوان کلید اصلی جدول خود در نظر بگیریم. برای اینکار باید شما در بالای هر دو پراپرتی خود خاصیت [Key] را قید کنید:

 

public class Passport 
{ 
    [Key] 
    public int PassportNumber { get; set; } 
    [Key] 
    public string IssuingCountry { get; set; } 
    public DateTime Issued { get; set; } 
    public DateTime Expires { get; set; } 
}

 


اگر شما برای اجرای این دستور یک InvalidOperationExceptions دریافت کردید شاید به این دلیل باشد که Entity Framework نمی داند ترتیب اجرای این دستورات به چه صورتی است، بدین منظور که وقتی شما دو پراپرتی را به عنوان کلید در نظر می گیرید Entity Framework باید ترتیب این دو پراپرتی را برای ایجاد کلید اصلی بداند.

 

مثال

اگر مقدار پراپرتی اول شما(PassportNumber) 200 باشد و مقدار پراپرتی دوم شما(IssuingCountry) 350 باشد. کلید شما می تواند 200350 باشد یا 350200، Entity Framework باید بداند کدام کلید را اول و کدام را دوم قرار دهد:

 

public class Passport 
{ 
    [Key] 
    [Column(Order=1)] 
    public int PassportNumber { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public string IssuingCountry { get; set; } 
    public DateTime Issued { get; set; } 
    public DateTime Expires { get; set; } 
}

 

Required

برای اجباری کردن پراپرتی ها می توانید به صورت زیر عمل کنید
 

[Required] 
public string Title { get; set; }

 

این دستور باعث می شود که فیلد شما در پایگاه داده به non-nullable تبدیل شود

Required Data Annotations

 


MaxLength and MinLength

این دو خاصیت این امکان را به شما می دهند تا حداقل و حداکثر مجاز برای وارد کردن داده در این فیلد را معین کنید:
 

[MaxLength(10),MinLength(5)] 
public string BloggerName { get; set; }

 

MaxLength annotation بر روی دیتابیس نیز تاثیر می گذارد و باعث می شود که حداکثر طول این فیلد بر اساس مقداری که شما وارد کرده اید تغییر کند.


MaxLength and MinLength Data Annotations


شما می توانید به وسیله data annotation پیغام خطایی را برای هر خاصیت فیلد تعیین کنید تا درصورتی که مقداری معتبر وارد نشد، پیغام شما به کاربر نمایش داده شود:
 

[MaxLength(10, ErrorMessage="BloggerName must be 10 characters or less"),MinLength(5)] 
public string BloggerName { get; set; }

 

ErrorMessage Data Annotations

 

NotMapped

تمامی فیلدهایی که شما در Model خود تعریف می کنید در دیتابیس نیز اضافه می شود، ممکن است شما فیلدی را بخواهید در Model خود تعریف کنید که نیاز به ذخیره شدن در دیتابیس نداشته باشد، برای این کار می تواند از خاصیت[NotMapped]  استفاده کنید:

 

[NotMapped] 
public string BlogCode 
{ 
    get 
    { 
        return Title.Substring(0, 1) + ":" + BloggerName.Substring(0, 1); 
    } 
}

 


 

نظرات

  • Hannah Martinez
    farzaneh
    دو شنبه 11 دی 1278 - 0:00

    mamnuna az maghaleye khubetun

  • Hannah Martinez
    علی ف
    پنج شنبه 16 آبان 1398 - 22:22

    ممنون از مطلب کم نظیرتون

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس