سعید صفایی | SAEED SAFAEE

بررسی ()ToQueryString. و ()Include. در Core5

سعید صفایی دیدگاه
بررسی ()ToQueryString. و ()Include. در Core5

بررسی ()ToQueryString. و ()Include. در Core۵

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

با استفاده از ()ToQueryString. در Entity Framework Core ۵.۰ که برای برای پرس و جوهای LINQ ارائه می شود، می توانید کوئری که به برای دیتابیس تولید میکند(T-SQL) را مشاهده کنید.


بررسی یه مثال:

public class Person 
{
    [Key]     
    public int ID { get; set; }     
   public string Name { get; set; }     
   public List<PersonChild> Childs { get; set; }       
   public List<PersonAddress> Address { get; set; } 
}

public class PersonChild 
{               
   [Key]               
  public int CildID { get; set; }               
  public string ChildName { get; set; }         

public class PersonAddress 
{                   
   [Key]                   
   public int AddressID { get; set; }                   
   public string AddressName { get; set; }         
}


در بالا کلاس person و Child های آن را ساختیم

با استفاده از دستور زیر می توانیم T-SQL که EF برای ما تولید میکند را ببینیم:

var list= db.Persons.Where(r=> r.ID == ۱).Include(i => i.Childs).Include(r => r.Address).ToQueryString(); 

دستور بالا یک شخص را با فرزندان و آدرس ها باز می گرداند


نتیجه این دستور به شکل کوئری زیر است:

۱۲۳۴۵۶SELECT[p].[ID], [p].[Name], [p۰].[CildID], [p۰].[ChildName], [p۰].[PersonID], [p۱].[AddressID], [p۱].[AddressName], [p۱].[PersonID] FROM[Persons] AS[p] LEFT JOIN[PersonChild] AS[p۰] ON[p].[ID] = [p۰].[PersonID] LEFT JOIN[PersonAddress] AS[p۱] ON[p].[ID] = [p۱].[PersonID] WHERE[p].[ID] = ۱             ORDER BY[p].[ID], [p۰].[CildID], [p۱].[AddressID]


این روش مناسبی است چون فقط یک بار به دیتابیس درخواست می دهد، در گذشته برای هر جدول Child و Address یک درخواست جدا ارسال می شد به دیتابیس، اما فقط برای رکورد های کمتر از ۱۰تا، برای رکورد های بیشتر از آن به شدت افت سرعت دارد و بسیار بد است.



 هرگز فراموش نکنید: بهینه سازی زودرس ریشه همه بدی ها است



دیدگاه خود را بگذارید