Primary key Attribute – مشخص کردن کلید اصلی جدول

آشنایی با اتریبیوت Primary key در روش Code First

مشخص کردن Primary key در Code first
set primary key for table in code first in ef core

کلید اصلی یا Primary key چیست ؟ چگونه می توانم برای یک جدول در دیتابیس به روش کدفرست کلید اصلی قرار دهم ؟ کلید اصلی باید چه ویژگی هایی داشته باشد؟

سلام ، آرزو ابراهیمی هستم مدرس فیلم اموزش asp.net core و با یک مقاله آموزشی دیگر از فصل  اموزش Entity Framework core در خدمت شما دوستان عزیز هستم.

Primary key یا کلید اصلی چیست ؟

قبل اینکه بریم سراغ مشخص کردن کلید اصلی جدول دیتابیس می‌خواهیم با مفهوم کلید اصلی یا Primary key آشنا شویم.
کلید اصلی به زبان ساده به آن ویژگی یا صفتی از موجودیت گفته می‌شود که منحصر فرد است. به عنوان مثال اگر هر ایرانی را به عنوان یک موجودیت در نظر بگیریم کدملی را می‌توانیم به عنوان کلید اصلی برای این موجودیت در نظر بگیریم چرا که هر ایرانی کدملی منحصر به فرد خود را دارد و هیچ دو ایرانی پیدا نمی‌شود که کدملی آنها یکسان باشد.

قرار دادن کلید اصلی برای یک Table در روش Code First در EF Core

جهت قرار دادن کلید اصلی برای جداول در Database می‌توانیم از سه روش استفاده کنیم که در ادامه این مقاله آموزشی با این سه روش آشنا خواهید شد.

اولین Property به عنوان کلید اصلی در نظر گرفته می شود.

پروژه ای که در جلسات گذشته ایجاد کردیم را باز کنید ، در کلاس Student کلید اصلی را مشخص نکردیم اما اگر به دیتابیس StudentDB مراجعه کنید متوجه خواهید شد که StudentId به عنوان کلید اصلی در نظر گرفته شده است.

چرا چنین اتفاقی افتاد؟ اگر شما خودتان کلید اصلی را مشخص نکنید به صورت خودکار اولین پراپرتی کلاس به عنوان کلید اصلی در نظر گرفته می شود و چون در کلاس Student اولین پراپرتی StudentId هست این Property به عنوان Primary key در نظر گرفته شده است.

مشخص کردن Primary key به روش Data Annotation Attributes

در این روش برای مشخص کردن کلید اصلی یا Primary key از اتریبیوت [Key()] بالای سر آن پراپرتی که می‌خواهیم به عنوان کلید اصلی در نظر گرفته شود استفاده می‌کنیم.

به سراغ پروژه جلسه آموزشی گذشته میرویم این پروژه را باز کنید اگر یادتان باشد در جلسه آموزشی گذشته تغییر نام ستون یک Table در روش کدفرست  را به شما آموزش دادم و حالا می‌خواهیم با استفاده از اتریبیوت Key کلید اصلی این Entity یا موجودیت را مشخص کنیم.
طبق تعریفی که از کلید اصلی خدمت شما ارائه کردم ، به نظرتون کدوم Property از کلاس Student ، کلید اصلی یا Primary key است ؟ بله درست حدس زدید پراپرتی StudentId .

چرا این Property کلید اصلی هست ؟ چون هر دانشجو ، شماره دانشجویی متفاوتی دارد و هیچ دوتا دانشجویی رو نمی توان پیدا کرد که شماره دانشجویی آنها یکسان باشد.
پس بالای سر پراپرتی StudentId از اتریبیوت Key استفاده می‌کنیم ، مطابق با کد زیر :

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace EFCore_C05.Models
{
    [Table("StudentMaster")]
    public class Student
    {
        [Key]
        public string StudentId { get; set; }
        public string NationalCode { get; set; }

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

        [Column("LastName")]
        public string Family { get; set; }
        public DateTime BirthDate { get; set; }
    }
}

برای این که برنامه اتریبیوت Key را بشناسد باید using زیر را به بالای کلاس Student اضافه کنید.

using System.ComponentModel.DataAnnotations;

حالا کافیه دیتابیس را آپدیت کنیم بعد از آپدیت دیتابیس ، ستون StudentId به عنوان کلید اصلی یا Primary key در نظر گرفته میشود.
چنانچه با نحوه آپدیت دیتابیس در asp.net core آشنایی ندارید پیشنهاد میکنم مقاله آموزش  آپدیت Database در روش CodeFirst را حتما مطالعه نمایید.

بعد از آپدیت دیتابیس ، برای مشاهده جدول دیتابیس ، MSSQL را اجرا کنید همانطور که تصویر زیر مشاهده میکنید کلید اصلی یا Primary key با علامت کلید مشخص شده است.

کلید اصلی (primary key) در جدول
primary key in table

مشخص کردن Primary key به روش Fluent API

با استفاده از روش Fluent API که در مقاله آموزشی پیکربندی کلاس های Domain در Code First با آن آشنا شدید هم می‌توانید کلید اصلی یا Primary key را مشخص کنید.

ابتدا باید متد OnModelCreating را در کلاس Override ، StudentDBContext کنید سپس داخل این متد از کدهای زیر استفاده نمایید.

builder.Entity<Student>().HasKey(b => b.StudentId);

در کد بالا برای مشخص کردن کلید اصلی از متد HasKey() استفاده کرده ایم و سپس در کد b => b.StudentId پراپرتی کلید اصلی را مشخص کردیم.

پس متد OnModelCreating پس از تغییر به صورت زیر خواهد شد.

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<Student>().ToTable("StudentMaster");
    builder.Entity<Student>().Property(b => b.Name).HasColumnName("FirstName");
    builder.Entity<Student>().Property(b => b.Family).HasColumnName("LastName");
    builder.Entity<Student>().HasKey(b => b.StudentId);
}

در صورتی که بخواهیم کدنویسی کوتاه تری داشته باشیم می‌توانیم بعد از متد ToTable از متد HasKey استفاده کنیم همانند کد زیر :

builder.Entity<Student>().ToTable("StudentMaster").HasKey(b => b.StudentId);

دوستان این مقاله آموزشی هم به پایان رسید سوالی ، انتقادی ، پیشنهادی داشتید حتما در قسمت نظرات ارسال کنید پاسخگوی شما دوستان خواهم بود.

 

فیلم آموزشی asp.net core 2

آرزو ابراهیمی
بیش از 6 سال است که زمینه طراحی و توسعه سایت فعالیت می‌کنم، طراح و برنامه نویس انواع سامانه‌های تخصصی پزشکی، مناقصات، فروشگاهی و … بودم و هستم و هدفم در سایت میزفا ارائه اطلاعات بروز و ناب در زمینه طراحی سایت است. تا از این طریق بتونم تجربیات و دانسته های خودم را با تمامی علاقمندان به مباحث طراحی سایت به اشتراک بزارم .

فیلم آموزشی asp.net core 2

3 نظر

3 پاسخ

  1. خب این مقاله درست الام اگه جدول من ارتباط یک به یک با خودش داشنه باشه چی ؟ اونوقت باید چی کار کنیم که درست بشه خودش که تشخیص نمیده ؟

  2. سلام آیا میشه در یک جدول sql server دو کلید اصلی داشت. برای مثال توی عکسی که آپلود کردم، در پروژه ای مشاهده کردم که ظاهرا میشه این کار را کرد؟ ممنون میشم یک توضیح در مورد این دهید چون زیاد برخورد کردم با این عنوان که در جدول هایمان بیش از یک کلید اصلی نمی توان داشت !
    ممنون

    1. سلام وقتتون بخیر
      بله میشه دوتا کلید قرار بدید در واقع این دوتا کلید هر کدوم به تنهایی کلید خارجی هم هستند.
      حالا شما در EF Core با استفاده از Fluent API می تونید این مورد رو پیاده سازی کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=