آموزش طراحی سایتنکات و ترفندهای Asp.Net MVC

رابطه یک به یک بین جداول در ASP.NET MVC به روش EF Codefirst

آموزش رابطه یک به یک در EF Codefirst

با عرض سلام خدمت تمامی علاقمندان به مباحث آموزش طراحی سایت با ASP.NET MVC ، در این مقاله آموزشی قصد داریم تا شما را با نحوه پیکربندی رابطه یک به یک به روش EF Codefirst آشنا نماییم پس تا انتهای این مقاله آموزشی با ما همراه باشید.

فرض کنید که می‌خواهیم در دیتابیس یک جدول برای درج اطلاعات شخصی یک دانش آموز و یک جدول برای درج اطلاعات مربوط به محل سکونت او ایجاد نماییم برای ایجاد رابطه یک به یک بین این دو جدول باید کلید اصلی (Primary Key) جدول اطلاعات شخصی هم به عنوان کلید اصلی و هم به عنوان کلید خارجی (ForeignKey) جدول اطلاعات محل سکونت در نظر گرفته شود. همانند تصویر زیر:

رابطه یک به یک در EF Codefirst
رابطه یک به یک در EF Codefirst

پیکربندی رابطه یک به یک با Data Annotation ها

همانطور که می‌دانید در روش EF Codefirst برای هر جدول یک کلاس تعریف می شود و نوع داده های جدول ، تعریف کلید اصلی و خارجی ، و ارتباط بین جداول توسط Data Annotation ها انجام می شود. در این مقاله آموزشی ما به شما طریقه پیکربندی رابطه یک به یک به روش EF Codefirst را آموزش خواهیم داد. در گام نخست ابتدا در پوشه Model یک کلاس با نام دلخواه ایجاد نموده و سپس کلاس های جدول Student و StudentAddress را در آن بنویسید .

کلاس Student (جدول اطلاعات شخصی)

 public class Student
    {
        [Key]
        public int Id { get; set; }
        public string StudentName { get; set; }
        public virtual StudentAddress Address { get; set; }

    }

کلاس StudentAddress (جدول اطلاعات محل سکونت)

     public class StudentAddress
    {
        [Key, ForeignKey("Student")]
        public int StudentId { get; set; }
        public string Address1 { get; set; }
        public string Address2 { get; set; }
        public string City { get; set; }
        public int Zipcode { get; set; }
        public string State { get; set; }
        public string Country { get; set; }

        public virtual Student Student { get; set; }
    }

ایجاد کلاس Context برای ساخت دیتابیس

در گام آخر در پوشه ی Model یک کلاس جهت ایجاد کلاس Context به پرژه خود اضافه نمایید ما نام کلاس Context خود را  OneToOneContext قرار داده ایم که در تکه کد زیر مشخص است شما به جای نام OneToOneContext نام کلاس Context خود را قرار دهید.

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace OneToOne.Models
{
    public class OneToOneContext : DbContext
    {
        public OneToOneContext() : base("name=DefaultConnection")
        {
        }

        public DbSet<Student> Students { get; set; }
        public DbSet<StudentAddress> StudentAddress { get; set; }
    }
}

به همین راحتی شما توانستید یک رابطه یک به یک بین جداول خود در دیتابیس ایجاد نمایید در صورتی که پیرامون این مقاله و سایر مقالات آموزشی ASP.NET MVC سوالی داشتید حتما سوال خود را در نظرات سایت میزفا ارسال نمایید.

برچسب ها

آرزو ابراهیمی

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

نوشته های مشابه

‫6 نظرها

  1. درود و سپاس بابت مهربانی های بی منتتون
    در این مثال اگر قرار باشه اطلاعات کل دانش آموزان مدرسه رو به تفکیک اسم کلاس ها داخل جدول های مختلف ذخیره کنیم چه باید بکنیم؟
    فرض کنیم که جدولی در دیتابیس داریم که اسم کلاس ها(کلاس اول الف، کلاس اول ب، کلاس اول ج، کلاس دوم الف، کلاس دوم ب و…) با ایندکس مشخص ذخیره شده.
    حالا ما باید به ازای هر رکوردی که در جدول کلاس ها داریم یک جدول مستقل بسازیم(A1_Students، B1_Students، C1_Students، A2_Students، B2_Students، C2_Students و…)
    پانوشت: میدونم که میتونیم داخل جدول دانش آموزان یک فیلد اضافه کنیم برای ذخیره ی اسم کلاس ولی میخوام که برای هر کلاس یک جدول مستقل داشته باشیم.

    1. سلام ممنون … شما می تونید یک جدول داشته باشید برای ذخیره اطلاعات کلاس ها که شامل دو ستون اصلی نام کلاس و ایدی کلاس هست حالا می تونید اطلاعات دیگه کلاس رو هم به این جدول اضافه کنید و یک جدول داشته باشید برای ذخیره اطلاعات دانش آموزان ، حالا داخل جدول اطلاعات دانش آموزان یک ستون قرار بدید و آیدی مربوط به کلاس دانش آموز رو در این ستون ذخیره کنید در واقع رابطه بین کلاس و دانش آموز یک رابطه یک به چند هست
      به نظر من این پیاده سازی اصولی تر هست تا اینکه شما به ازای هر کلاس یک جدول جداگانه برای ذخیره اطلاعات دانش آموزان بسازید
      اولا تعداد جداول کاهش پیدا میکنه و حجم دیتابیش شما هم کمتر میشه و اگردر آینده یک کلاس جدید اضافه شد دیگه لازم نیست که شما یک جدول دیگه ایجاد کنید فقط کافیه که نام کلاس رو به جدول اطلاعات کلاس ها اضافه کنید و بعد هم لیست دانش آموزان اون کلاس رو به جدول دانش آموزان اضافه کنید. در ضمن اگر کلاس یک دانش آموز تغییر کرد فقط شما آیدی کلاسش رو تغییر میدید دیگه لازم نیست که شما کل اطلاعات این دانش آموز رو دوباره به یک جدول دیگه انتقال بدید.

  2. سلام
    من توی جدول های پایگاه دادم کلید خارجی دارم الان مثلا توی فرم ثبت آگهی که کاربر پر میکنه،کلید اصلیش خودش اضافه میشه خودکار بدون دخالت کاربر چطوری باید کاری کنم ک از طریق دکمه خود ب خود تو همون ثبت اگهی کلید خارجی هم اضافه بشه

    1. سلام متاسفانه متوجه مشکل شما نشدم … اگر کلید اصلی به صورت خودکار مقدار میگیره باز هم شما می تونید موقع درج اطلاعات مقدار کلید اصلی رو دریافت کنید و کلید خارجی را در داخل جدول دیگه مقدار دهی کنید.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
سایت خود را در گوگل مدیریت کنید + ۱۵ ساعت فیلم آموزشیجزئیات بیشتر اینجا کلیک کنید
بستن
با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

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

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
ترک میزفا خوب نیست!
دوره سئو، رایگان شد.
یک چیز متفاوت تجربه کنید
کاراکتر اشاره گر
دوره سئو، رایگان شد.
یک چیز متفاوت تجربه کنید
کاراکتر اشاره گر