آموزش Entity Framework قسمت 3 : تعریف Mapping با Attribute ها

در بخش های قبلی در مورد مقدمات استفاده از Entity Framework Code-First و همچنین درباره کلاس های DbContext و DbSet مطالبی را مطرح کردیم. در ادامه به نحوه تغییر Mapping با استفاده از Attribute ها می پردازیم.همانطور که گفتیم Mapping به ایجاد رابطه میان کلاس ها و Property کلاس ها و جداول بانک اطلاعاتی می گوییم، برای مثال، خصوصیت FirstName داخل کلاس Customer به ستون FirstName داخل جدول Customers اشاره می کنه. اما میشه این رابطه ها رو تغییر داد. برای مثال میتونیم بگیم خصوصیت FirstName به ستون Name داخل بانک اشاره کنه. این کار به دو روش امکان پذیره، روش اول استفاده از Attribute ها است، روش دوم استفاده از Fluent API هست که در بخش بعدی در مورد Fluent API ها توضیح خواهیم داد. Attribute هایی که در این بخش بررسی خواهیم کرد به شرح زیر می باشند:

  1. TableAttribute
  2. ColumnAttribute
  3. RequiredAttribute
  4. MaxLengthAttribute
  5. KeyAttribute
  6. DatabaseGeneratedAttribute
  7. NotMappedAttribute

کلیه Attribute های بالا، در فضای نام System.ComponentModel.DataAnnotations قرار دارند.

TableAttribute

کار این Attribute، تغییر جدول Map شده به Entity است. کلاس Customer که در بخش قبلی استفاده کردیم را به خاطر دارید؟

public class Customer
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

به صورت پیش فرض این کلاس به جدول Customers در بانک Map خواهد شد. Entity Framework به صورت پیش فرض اسم جمع Customer را که Customers می شود به عنوان نام جدول انتخاب می کند. با TableAttribute می توانیم این پیش فرض را تغییر دهیم، کافی است که از این Attribute در بالای کلاس استفاده کرده و نام جدول مورد نظر را به آن بدهیم:

[Table("MyTable")]
public class Customer

با قرار دادن Attribute بالا روی کلاس Customer، ما به Entity Framework می گوییم که کلاس جدول معادل کلاس Customer در بانک اطلاعاتی، جدول MyTable است.

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

[Table("MyTable",Schema = "orders")]
public class Customer

ColumnAttribute

وظیفه این Attribute، تغییر Mapping خصوصیات کلاس و ستون های جدول هست. برای مثال، ما می خواهیم خصوصیت FirstName در کلاس Customer به ستون FName در جدول بانک اطلاعاتی متصل شود. برای این کار کافیست این Attribute را بالای خصوصیت مورد نظر بگذاریم:

[Column("FName")]
public string FirstName { get; set; }

همچنین، با استفاده از این Attribute می توانیم نوع ستون جدول را نیز مشخص کنیم، برای مثال، کلیه خصوصیات از نوع string، به عنوان nvarchar در نظر گرفته می شوند، برای تغییر، کافیست نوع داده را از طریق TypeName مشخص کنیم:

[Column("FName",TypeName = "varchar")]
public string FirstName { get; set; }

RequiredAttribute

به صورت پیش فرض، کلیه خصوصیات داخل کلاس که از نوع string هستند، ستون معادل آنها در بانک از نوع Nullable در نظر گرفته می شود، اگر این Attribute بر روی یک خصوصیت قرار داده شود، ستون معادل از نوع Not Null در نظر گرفته خواهد شد.

MaxLengthAttribute

بوسیله این Attribute می توان طول یک ستون را در بانک مشخص کرد، به صورت پیش فرض کلیه خصوصیات string، با طول 255 در نظر گرفته می شوند. با این خصوصیت می توان این طول را تغییر داد:

[Column("FName",TypeName = "varchar")]
[MaxLength(1000)]
public string FirstName { get; set; }

با کد بالا، خصوصیت FirstName به ستون FName از نوع varchar با طول 1000 Map خواهد شد.

KeyAttribute

وقتی شما یک کلاسی را داخل DbContext به عنوان Entity مشخص می کنید، اولین خصوصیتی که دارای کلمه Id باشد یا ترکیبی از نام کلاس و کلمه Id باشد (بزرگی و کوچکی حروف تفاوتی نمی کند)، به عنوان ستون کلید در نظر گرفته خواهد شد. برای مثال CustomerId، ID، ProductId یا هر اسم دیگری که داخل آن Id باشد به عنوان کلید در نظر گرفته می شود. این مسئله قابل تغییر است، کافیست بر روی ستون کلید کلاس، این Attribute را قرار دهید تا به عنوان کلید در نظر گرفته شود.

دقت کنید که تنها خصوصیاتی که نوع عددی صحیح دارند یا از نوع GUID هستند، می توانند به عنوان کلید انتخاب شوند.

DatabaseGeneratedAttribute

در صورتی که خصوصیت شما به ستونی از نوع Identity یا Computed اشاره می کند، از این Attribute استفاده کنید. وظیفه این Attribute مشخص کردن نحوه برخورد بانک با یک ستون از یک جدول است.

برای مشخص کردن از نوع Identity:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

برای مشخص کردن از نوع Computed:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

NotMappedAttribute

بعضی اوقات، داخل کلاس ما یک خصوصیت هست که به هیچ ستونی داخل بانک اشاره نمی کند. برای مثال فرض کنیم که می خواهیم داخل کلاس Customer یک خصوصیت با نام Title داشته باشیم که این ستون معادلی داخل بانک ندارد. برای این که این مسئله را به Entity Framework بفهمانیم، این Attribute را بر روی خصوصیت مورد نظر می گذاریم. در صورت عدم وجود این کار، خطا رخ خواهد داد با این مضمون که ستون معادل برای Title در جدول وجود ندارد.

در صورتی که خصوصیت ما به صورت Get Only باشد، یعنی فقط بخش get برای این کار نوشته شده باشد، دیگر نیازی به استفاده از این Attribute نیست.

در بخش بعدی مقاله در مورد استفاده از Fluent API و ایجاد رابطه ها صحبت خواهیم کرد.
#آموزش_سی_شارپ #ویوها_در_entity_framework #ایجاد_جدول_با_entity_framwork #entity_framework_چیست؟ #آموزش_entity_framework_code_first #نمایش_اطلاعات_ویو_ها_در_entity_framework #اموزش_برنامه_نویسی_entity_framework #آموزش_entity_framework
عنوان
1 آموزش Entity Framework قسمت 1 : معرفی و شروع به کار رایگان
2 آموزش Entity Framework قسمت 2 : کلاسهای DbContext و DbSet رایگان
3 آموزش Entity Framework قسمت 3 : تعریف Mapping با Attribute ها رایگان
4 آموزش Entity Framework قسمت 4 : تعریف Mapping با Fluent API رایگان
5 آموزش Entity Framework قسمت 5 : تعریف رابطه ها بخش 1 رایگان
6 آموزش Entity Framework قسمت 6 : تعریف رابطه ها بخش 2 رایگان
زمان و قیمت کل 0″ 0
2 نظر
lovetohi

با سلام

در قسمت KeyAttribute نوشتین "اولین خصوصیتی که دارای کلمه Id باشد، به عنوان ستون کلید در نظر گرفته خواهد شد" . تا جایی که من اطلاع دارم خصوصیتی به عنوان کلید به صورت اتوماتیک انتخاب میشه که یا کلمه id باشد (کوچک بزگ بودن حروف مهم نیس) یا ترکیب نام کلاس و کلمه id باشد (بزرگ و کوچک بودن حروف مهم نیس) و سایر کلمات به صورت اتوماتیک کلید در نظر گرفته نمی شوند و برای اینکه کلید در نظر گرفته شوند از KeyAttribute باید استفاده شود.

ممنون میشم بررسی کنین

حسین احمدی

سلام، وقت بخیر.

موردی که گفتید داخل متن اصلاح شد. تشکر :)

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....