بهینه سازی کارایی Entity Framework

در برنامه های تحت وب، با توجه به اینکه بخش عمده‌ای از پردازش بر روی یک سرور مرکزی انجام می‌شود، بهینه‌سازی از اهمیت بسیار بالایی برخوردار است. در این مقاله می خواهیم آموزش دهیم که چگونه می توان کارایی Entity Framework را در زمان استفاده از روش Code First بهینه ساخت.

بهینه سازی کارایی Entity Framework

مقدمه

در فریم ورک Entity،اشیا فرزند(ویژگی های هدایت کننده-Navigation Properties)هنگامی بارگذاری خواهند شد که برای اولین با توسط تکنیک های lazy loading(بارگذاری دیرهنگام)  در دسترس قرار بگیرند. این بارگذاری خودکار زمان اجرای Query را افزایش و کارایی را کاهش می دهد. از این رو، برای افزایش کارایی دو ایده مد نظر است. ایده اول، lazy loading توسط پرس و جوی دستی شی با نوع شی و ID ها انجام شود.

ایده دوم این است که شی فرزند فقط روی درخواست گرفته شود و تمام شی در اولین بار گرفته نشود.

 اشیا فرزند (Navigation Properties) زمانی که اولین بار توسط تکنیک های lazy loading در دسترس قرار می گیرد، بارگذاری خواهند شد. این بارگذاری اتوماتیک، زمان اجرای Query را افزایش و کارایی را کاهش می دهد.

از این رو ایده اول مبنی بر انجام  lazy loading توسط پرس و جوی(Quering) دستی شی، با نوع شی و Id ها می باشد. ایده دوم مبنی بر گرفتن شی فرزند تنها روی درخواست است و تمام شی را در بار اول نمی گیرد.

پیش نیاز

داشتن اطلاعات از مفاهیم زیر در Entity Framework برای درک این مطلب لازم و ضروری است:

روش Code First

Lazy loading

DbContext

مدل سازی و مفاهیم برنامه نویسی شی گرا

MVVM – Model-View-View Model

 

استفاده از کد:

1.ایجاد ID برای هر کدام از ویژگی های ناوبری(Navigation Properties)

این ID برای گرفتن navigation property از entity framework در طول پرس و جوی شی لازم است. نام این ID باید شامل نام navigation property مرتبط با ID دنبال شده باشد. برای مثال، اگر نام Navigation property برابر "Department" در کلاس " Employee" باشد آنگاه نام id باید به صورت " DepartmentId" باشد.

توجه: اگر از نامگذاری بالا پیروی نشود، اجباری است که صفت  ForeignKeyAttribute برای Navigation property قرار داده شود که این توسط ID مرتبط با نام property  تعیین می شود.

نوع داده ID بستگی به نوع داده مرتبط با شی navigation property می باشد.

اگر navigation property اختیاری است، id  باید null پذیر باشد.

public class Employee
{
    public int id { get; set; }
    public string Name { get; set; }
    public Department Department { get; set; }
    public int? DepartmentId { get; set; }
}
public class Department
{
    public Department()
    {

    }
    public int Id { get; set; }
    public string Name { get; set; }
}

 

2. گرفتن شی فرزند با نوع و ID و اختصاص آن به navigation property

var ctx = new EmployeeContext("connection string");
           var empl = ctx.Employees.First();
           empl.Department =  ctx.Set(typeof(Department)).Find(empl.DepartmentId) as Department;

 

دانلود نسخه ی PDF این مطلب