مشخصه های Shadow در (Entity Framework core (EF7
شنبه 1 آبان 1395Entity Framwork Core ویژگی جدیدی را با نام Shadow properties معرفی کرده است . مزیت اصلی این مشخصه ها این است که بدون declare کردن آنها در کلاس های model ، میتوانیم از آنها در کلاس هایمان استفاده کنیم . در ادامه این مقاله ، بیشتر با این مشخصه اشنا خواهید شد .
مشخصه های 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 جدید ، همان مشخصه ی موجود را پیکربندی خواهد کرد .آموزش سی شارپ
- C#.net
- 2k بازدید
- 1 تشکر