عدم تبدیل برخی خصوصیات کلاس به ستون های جدول در Cod First

یکشنبه 17 آبان 1394

در روش Code First برخی اوقات ممکن است نخواهیم جدول همه Property ها در پایگاه داده ساخته شود، از این رو به دنبال راهی هستیم که بتوانیم این امکان را ایجاد کنیم. در این مقاله دو روش برای این کارارائه شده است.

عدم تبدیل برخی خصوصیات کلاس به ستون های جدول در Cod First

اول اجازه دهید کلاس Customer در Model را مورد بررسی قرار دهیم، که به صورت زیر است:

public class Customer
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string FullName
  {
    get
    {
      return FirstName +","+ LastName;
    }
  }
}

در این کلاس Property با نام "FullName" داریم. این Property برای نشان دادن نام کامل مشتری جهت ذخیره در جدول پایگاه داده مورد استفاده قرار می گیرد. در اینجا می خواهیم فقط Property های مربوط به FirstName و LastName را در جدول پایگاه داه ذخیره کنیم و نمی خواهیم Property مربوط به FullName در پایگاه داده ذخیره شود و فقط به صورت نمایشی در برنامه نشان داده شود.

برای صرف نظر از Property های کلاس در Entity Framework دو روش وجود دارد:

1. Data Annotation

2. Fluent API

 

Data Annotation

باید از صفت [NotMapped] استفاده کنید، به این معنا که نمی خواهید به یک ستون از جدول پایگاه داده Map شوید. در زیر مدل Customer آپدیت شده را با کلاس DataContext می بینید:

public class Customer
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  
  [NotMapped]
  public string FullName
  {
    get
    {
      return FirstName +","+ LastName;
    }
  }
}

public class CustomerContext : DbContext
{
  public DbSet<Customer> Customers { get; set; }
}

 

Fluent AP

برخی برنامه نویسان ترجیح می دهند، کلاس های مدل را بدون هرنوع  Data Annotation بنویسند. برای  این کار کلاس DataContext را قرار دهند.

شما می توانید از متد Ignore روی Property های کلاس استفاده کنید تا از map شدن به ستون های پایگاه داده جلوگیری کند.

در زیر یک مثال مشابه از Customer وجود دارد که از Fluent API استفاده می کند:

 public class Customer
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }       
        public string FullName
        {
            get
            {
                return FirstName +","+ LastName;
            }
        }
    }

    public class CustomerContext : DbContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Customer>().Ignore(customer => customer.FullName);
            base.OnModelCreating(modelBuilder);
        }
        public DbSet<Customer> Customers { get; set; }
    }

 

صرف نظر از اینکه پیکربندی را از طریق Data Annotation  یا Fluent API انجام دهید، استفاده از DBContext مشابه و به صورت زیر است:

static void Main(string[] args)
{
  Customer customer = new Customer { FirstName = "Mugil", LastName = "Ragu" };
  using(var db= new CustomerContext())
  {
    db.Customers.Add(customer);
    db.SaveChanges();
    Console.WriteLine("Added Customer:" + customer.FullName);
  }
  Console.ReadLine();
}

زمانی که شما برنامه را اجرا می کنید و ساختار جدول Customers را بررسی می کنید، می بینید که شامل Property مربوط به FullName نمی باشد:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید