چگونه میتوانیم نام یک Table را در Database در روش کدفرست تغییر بدم ؟ برای تغییر نام Table ها در روش Code First چه روش های موجود دارد و بهتر است از چه روشی استفاده کنم ؟ اتریبیوت Table در EF Core چه کاربردی دارد؟
سلام دوستان ، آرزو ابراهیمی هستم توسعه دهنده وب ، با یک مقاله آموزشی دیگر از مجموعه مقالات اموزش mvc core سایت میزفا در خدمت شما عزیزان هستم .
پیشنهاد میکنم قبل از شروع مطالعهی این مقاله آموزشی ، مقاله جلسه آموزشی ایجاد Database و جداول آن به روش CodeFirst را مطالعه و بررسی کنید چون میخواهم از پروژه جلسه گذشته در این جلسه آموزشی استفاده کنم.
سرفصلهای پست
تغییر نام جداول دیتابیس SQL Server سه روش در EF Core
جهت تغییر نام جدول در دیتابیس اسکیوال سرور میتوانیم از سه روش استفاده کنیم که در ادامهی این مقاله آموزشی این سه روش را به صورت عملی باهم بررسی خواهیم کرد پس همراه با این مقاله باشید.
تغییر نام Table از طریق تغییر نام Property از نوع کلاس DbSet
این روش خیلی ساده است ، اگر یادتون باشه در جلسه آموزشی گذشته در کلاس Context پروژه (StudentDBContext) یک Property از نوع کلاس DbSet تعریف کردیم به نام Students .
چون نام این پراپرتی از نوع کلاس DbSet را Students قرار دادیم طبق نام این پراپرتی یک جدول برایمان در دیتابیس همنام این پراپرتی (Students) ایجاد میشود.
حالا اگر که میخواهید نام جدول خود را به StudentMaster یا هر نام دلخواهی تغییر دهید کافیه نام این پراپرتی را تغییر دهید. پس به سراغ کلاس StudentDBContext میروم و نام پراپرتی را به StudentMaster تغییر میدهم.
public class StudentDBContext : DbContext { public StudentDBContext(DbContextOptions options) : base(options) { } public virtual DbSet StudentMaster { set; get; } }
حالا باید دیتابیس را آپدیت کنیم جهت آپدیت Database پیشنهاد میکنم جلسه آموزشی بروزرسانی دیتابیس در Code First را مطالعه نمایید.
تغییر نام Table به روش Data Annotation Attributes
برای تغییر نام جدول در این روش از اتربیوت [Table()]
بالای سر Domain Class مربوط به موجودیت دانشجو استفاده میکنیم ، بعد از اضافه نمودن اتریبیوت Table برای اینکه پروژه دچار خطا نشود باید using System.ComponentModel.DataAnnotations.Schema;
را به قسمت using های کلاس Student اضافه کنید.
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Threading.Tasks; namespace EFCore_C05.Models { [Table("StudentMaster")] public class Student { public string StudentId { get; set; } public string NationalCode { get; set; } public string Name { get; set; } public string Family { get; set; } public DateTime BirthDate { get; set; } } }
خب همانطور که در کد بالا مشاهده میکنید چون من میخواهم نام جدول موجودیت Student به StudentMaster تغییر دهم ، من این نام جدید جدول را به اتریبیوت Table ارسال میکنم به صورت روبه رو [Table("StudentMaster")]
حالا کافی هست که دیتابیس را آپدیت کنید تا تغییر اعمال شود.
تغییر نام Table دیتابیس به روش Fluent API
با استفاده از روش Fluent API که در مقاله آموزشی روش های پیکربندی کلاس های Entity در Code First با آن آشنا شدید هم میتوانید نام جدول را تغییر دهید.
ابتدا باید متد OnModelCreating را در کلاس Override ، StudentDBContext کنید طبق کد زیر
using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EFCore_C05.Models { public class StudentDBContext : DbContext { public StudentDBContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity<Student>().ToTable("StudentMaster"); } public virtual DbSet<Student> Students { set; get; } } }
سپس باید یک نمونه از کلاس ModelBuilder
را به متد OnModelCreating کلاس والد (DbContext) ارسال کنید به صورت رو به رو base.OnModelCreating(builder);
که در کد بالا هم اینکار را انجام دادیم.
حالا برای تغییر نام جدول از متد Entity()
استفاده میکنیم سپس از متد ToTable()
و بعد نام جدیدی که میخواهیم به جدول اعمال شود را به متد ToTable پاس میدهیم به صورت روبه رو builder.Entity().ToTable("StudentMaster");
نکته : همین طور که در کد بالا مشاهده میکنید در روش Fluent API از یکسری متدها به صورت زنجیره ای و پشت سرهم میکنیم.
بسیار خب دوستان ، این مقاله آموزشی از مقالات اموزش asp.net با #C هم به پایان رسید امیدوارم که از این مقاله آموزشی هم رضایت داشته باشید سوالی ، انتقادی ، پیشنهادی دارید در قسمت نظرات حتما مطرح کنید.