tgoop.com/fullStackDevs/414
Last Update:
#EfCore_Best_Practice
#Explicit_compiled_queries
در این پست به معرفی یک ویژگی باحال که از EF 5 به بعد و در LINQ to SQL نیز وجود داشت و در EF Core از نسخه 2.0 به آن افزوده شد می پردازیم.
در ابتدا Ef Core در ورژن 1.0 ویژگی query caching را معرفی کرد . این ویژگی علاوه بر پرفورمنسی که دارد اما دارای سربارهایی نیز است.
هر کوئری برای کش شدن و نگه داری آن در حافظه و سپس استفاده مجدد از آن به یک کلید هش شده نیاز دارد که تولید این کلید هش شده از روی Query Expression سرباری دارد.
اما از نسخه Ef Core2.0 ویژه گی query compilation به آن اضافه شده.
در این حالت کوئری یک بار کامپایل شده و در حافظه نگه داری میشود و می توانید به هر دفعات که خواستید از ان استفاده کنید.
Example:private static Func<AdventureWorksContextDI, int, Orders> _getOrderById =
EF.CompileQuery((AdventureWorksContextDI context, int id) =>
context.WorkOrders.Select(
x => new Orders
{
Id = x.WorkOrderId,
ProductName = x.Product.Name,
Quantity = x.OrderQty,
Date = x.DueDate
}).FirstOrDefault(x => x.Id == id));
usage :public Orders GetOrderByIdCompiled(int id)
چه زمانی از این ویژگی استفاده کنیم ؟
{
return _getOrderById(_context, id);
}
1-کوئری تان قرار است خیلی بیشتر از یک بار متوالی اجرا شود.
2-کوئری شما به قدر کافی پیچیده است و هزینه هربار کامپایل ان زیاد است.
* نکته اول اگر دلیگیت کامپایل کوئری مورد نظر خود را به صورت استاتیک تعریف کنید می توانید در تمام نمونه های ApplicationDbContext خود از آن استفاده کنید.
*نکته دوم نسخه جاری Ef Core هنوز نوع خروجی
List<T>را برای یک کامپل کوئری پشتیبانی نمیکند.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/414