مشخصه های Shadow در (Entity Framework core (EF7

شنبه 1 آبان 1395

Entity Framwork Core ویژگی جدیدی را با نام Shadow properties معرفی کرده است . مزیت اصلی این مشخصه ها این است که بدون declare کردن آنها در کلاس های model ، میتوانیم از آنها در کلاس هایمان استفاده کنیم . در ادامه این مقاله ، بیشتر با این مشخصه اشنا خواهید شد .

مشخصه های Shadow در (Entity Framework core (EF7

مشخصه های Shadow بخشی از کلاس entity نیستند ، اما رفتار آنها بگونه ای است که انگار جزئی از آن است . مقدار و وضعیت این مشخصه ها در Change Tracker API نگهداری می‌شود .  این مشخصه ها میتوانند در تمام عملیات های پایگاه داده شرکت داشته باشند ، اما بهتر است که برای بقیه برنامه ، همیشه در معرض کلاس entity نباشد .



مزیت اصلی مشخصه های Shadow این است که شما میتوانید بدون declare کردن آنها در قسمتی از دامنه model ، از آنها استفاده کنید و این امکان را به توسعه‌دهندگان میدهد که این مشخصه ها را در کلاس هایی که هیچ Sorce code ای ندارند ، تعریف کنند . 

یک مثال در مورد Employee را بررسی خواهیم کرد ، در پایگاه داده جدول Employee دارای پنج مشخصه 
EmpoyeeId, FirstName, LastName, Age و CreatedDate میباشد . CreatedDate را در کلاس model پیاده سازی نمی‌کنیم و  بهتر است که آن را به عنوان یک مشخصه Shadow تعریف کنیم . 

public class Employee
{
    public int EmployeeId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

در حال حاضر ، مشخصه های shadow قابلیت ساخته شدن با data annotation ها را ندارند . شما میتوانید از Fluent API برای پیکربندی مشخصه های Shadow استفاده کنید . مشخصه های shadow توسط override کردن رویداد onModelCreating در کلاس DbContext ، تعریف میشوند . 

در ادامه مثال ، مشخصه ای از نوع DateTime با نام CreatedDate را به Employee entity ضمیمه میکنیم . وضعیت مشخصه CraeteDate بوسیله Change Tracker API توسط خودش مدیریت می‌شود . 

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>().Property<DateTime>("CreatedDate");
}

مسئولیت مدیریت وضعیت مشخصه های shadow بر عهده Change Tracker API میباشد ، و عملیات های Get و Set توسط این API صورت میگیرد . ما توانایی ایجاد تغییرات در مقادیر مشخصه های shadow را داریم :

context.Entry(employee).Property("CreatedDate").CurrentValue = DateTime.Now; 


مشخصه های Shadow میتوانند با استفاده از متد استاتیک EF.Property در کوئری های LINQ ، مورد استفاده قرار گیرند . برای مثال ، کد زیر برای بازیابی و واکشی لیستی از کارمندان که با توجه به CreateDate مرتب سازی شده اند ، میتواند مورد استفاده قرار بگیرد . 

var employees = context.Employee
                       .OrderBy(b => EF.Property<DateTime>(b, "CreatedDate"));

در اجرای رویداد onModelCreating ، اگر نام مشخصه متد با نام مشخصه shadow یا نام یکی از مشخصه های کلاس entity برابر باشد ، آنگاه کد ، به جای معرفی یک مشخصه shadow جدید ،  همان مشخصه ی موجود را پیکربندی خواهد کرد .آموزش سی شارپ

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

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 1 تشکر

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

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