آموزش ASP.NET Core MVCآموزش طراحی سایت

NotMapped Attribute – جلوگیری از Map شدن Property

آشنایی با اتریبیوت NotMapped در EF Core

اتریبیوت NotMapped در EF Core چه کاربردی دارد؟ چگونه از map شدن یک پراپرتی از کلاس در EF Core در روش CodeFirst و Fluent API جلوگیری کنیم ؟

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

عدم Map شدن یک پراپرتی در روش Code First در EF Core

جهت جلوگیری از مپ شدن یک Property روش CodeFirst می‌توانیم از دو روش استفاده کنیم که در ادامه این مقاله آموزشی با این دو روش آشنا خواهید شد.

نکته : شاید این سوال برای شما همانند دانشجویان  آموزش پروژه محور asp net core پیش بیاید که اصلا Map شدن به چه معناست ؟

خب من اصطلاح Map شدن را با یک مثال براتون توضیح میدم همونطور که خودتون بهتر از من می‌دونید در روش CodeFirst با تعریف یک کلاس و پراپرتی های آن کلاس ، یک جدول در دیتابیس می‌سازیم. در این دوره آموزش رایگان asp.net core هم یک کلاس تعریف کردیم به نام Student و برای آن پراپرتی هایی مثل StudentId و NationalCode و … را تعریف کردیم حالا زمانی که دیتابیس را آپدیت می‌کنیم پراپرتی StudentId باعث ایجاد یک ستون به نام StudentId در جدول میشود ، و ما اصطلاحا می‌گوییم که پراپرتی StudentId به ستون StudentId از جدول Map شده است.

عدم Map شدن یک پراپرتی به روش Data Annotation Attributes

در این روش جهت جلوگیری از Map شدن یک پراپرتی از کلاس از اتریبیوت[NotMapped] بالای سر آن پراپرتی استفاده می‌کنیم.

حالا به سراغ پروژه جلسه آموزشی گذشته میرویم این پروژه را باز کنید اگر یادتان باشد در جلسه آموزشی گذشته با اتریبیوت Max-Length جهت محدود کردن طول داده ها در EF Core آشنا شدیم و حالا می‌خواهیم از اتریبیوت NoMapped برای یک پراپرتی جدید استفاده کنیم.

خب من یک پراپرتی جدید به نام Age از نوع int تعریف می‌کنم و چون نمی‌خواهم این پراپرتی به ستونی از جدول StudentMaster مپ شود بالای سر آن از اتریبیوت NoMapped استفاده می‌کنم ، مطابق با کد زیر :

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; }

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

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

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

        [NotMapped]
        public int Age { get; set; }
    }
}

حالا فقط باید دیتابیس را آپدیت کنیم بعد از آپدیت دیتابیس ، خواهید دید که ستونی به نام Age در جدول StudentMaster نداریم چون با استفاده از اتریبوت NoMapped جلوی Map شدن این پراپرتی از کلاس را گرفتیم.
چنانچه با نحوه آپدیت دیتابیس در asp.net core آشنایی ندارید پیشنهاد میکنم مقاله آموزش  update دیتابیس در EF Core را حتما مطالعه نمایید.

جلوگیری از Map شدن یک Property به روش Fluent API

با استفاده از روش Fluent API که در مقاله آموزشی پیکربندی کلاس های Domain در Code First با آن آشنا شدید هم می‌توانید از Map شدن یک پراپرتی از کلاس ، جهت ایجاد ستونی جدید در جدول جلوگیری کنید.

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

builder.Entity<Student>().Ignore(c => c.Age);

در کد بالا برای جلوگیری از Map شدن پراپرتی Age از متد Ignore() استفاده کرده ایم. و سپس با استفاده از عبارات لامبدا پراپرتی Age را انتخاب کردیم به صورت c => c.Age .

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

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

از اینکه دوره آموزش net core. را دنبال می‌کنید، سپاسگزارم و امیدوارم براتون مفید بوده باشه. اگر سوال پیشنهاد و انتقادی داشتید خوشحال میشم که باهام در میان بگذارید و حتما در اولین فرصت بهتون پاسخ میدم.😊

برچسب ها

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

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

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

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

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

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

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

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