ویژگی های جدید Entity Framework Core 3

naeemaei dotnet core, EF Core, EF Core 3, Entity Framework

نسخه EF Core همچنان در حال توسعه می باشد و آخرین نسخه نهایی ارائه شده از آن در زمان نگارش این مقاله نسخه 2.2 می باشد، اما نسخه 6 Preview از EF Core 3 نیز در حال توسعه می باشد.

من در این مقاله قصد دارم ویژگی های جدیدی که قرار است در نسخه EF Core 3 اضافه گردند را معرفی کنم:

 

عدم ارزیابی کوئری های LINQ در سمت برنامه

قبل از EF Core 3

ابتدا لازمه که مسئله را تعریف کنم، زمانی که من یه کوئری LINQ می نویسم ممکنه که نیاز داشته باشم توی کوئری LINQ از توابع دات نتی استفاده کنم.
این مثال را در نظر داشته باشید:

هدفم دریافت همه بلاگهایی هستش که فیلد URL آنها شامل کلمه dotnet است. اما قبل از فراخوانی متد Contain شرطی را اعمال می کنم که URL ها را کنترل می کند و تابع آن یعنی StandardizeUrl را در C# نوشته ام. همین تابعی که در زیر می بینید:

اینجا چه اتفاقی خواهد افتاد؟؟؟؟
ابتدا لیست همه بلاگ ها از دیتابیس دریافت میشود و سپس شرط Contain روی لیست اعمال میشود، و در واقع Client evaluation رخ می دهد یعنی به جای اینکه سمت دیتابیس روی دیتا شروط اعمال شود در سمت برنامه این اتفاق می افتد و این از لحاظ Performance مشکلات بزرگی را ایجاد خواهد کرد مخصوصا زمانی که دیتای جدول بلاگ زیاد باشد.

در EF Core 3 چگونه است؟

اگر از توابع سمت کلاینت ( توابع موجود در برنامه دات نتی) در جایی غیر از Select در LINQ استفاده کنیم برنامه یک Exception خواهد داد تا شما مشکل فوق را مرتفع نمایید.

علت این بوده است که در بسیاری از موارد همه کوئری LINQ امکان ترجمه به کوئری SQL نداشت و گاها توسعه دهنده ی برنامه متوجه این موضوع نمی شد و EF ابتدا کل لیست را از دیتابیس دریافت می کرد و سپس شروط را روی لیست اعمال می کرد. به علت اینکه تست برنامه روی محیط Production با دیتای زیاد و واقعی نبود و جدول در محیط تست دارای رکوردهای کمی بود در بسیاری از موارد این مشکل خود را نشان نمی داد و به محض اینکه روی محیط Production با دیتای چند میلیونی قرار می گرفت سیستم دچار مشکل می شد، مشکلی که عمدی در ایجاد آن نبود و حتی کسی متوجه آن نشد.

پی نوشت: 

امکان تغییر رفتار برای throw an exception for client evaluation نیز وجود دارد، شاید برای زمانی که از EF Core 2.2 به EF Core 3 مهاجرت کردیم برایمان خوش آیند نباشد که با تعداد زیادی Exception مواجه شویم که البته باید راهی برای حل آنها بیابیم، اما می توانیم این رفتارِ پرتاپ استثنا را تغییر دهیم، اما چگونه؟

می توانیم اعلام کنیم نمی خواهیم Exception رخ دهد یا اتفاق دیگری رخ دهد:

من می توانم در DbContext.OnConfiguring یا در Startup.cs این تنظیمات را ست کنم.

 

 

ادامه دارد…

شاید دوست داشته باشید:

آشنایی با ویژگی های جدید c# 8 – بخش اول

سی شارپ 8 و قابلیت های آن: قبل از بررسی قابلیت های C# 8 به نکته زیر توجه نمایید. نکته […]

بررسی راهکارهای افزایش کارایی در Entity Framework Core 2 : بخش اول

گاهاً یکی از نقاط ضعف Entity Framework در مقابل ORM های دیگر که مطرح می گردد کارایی کوئری های ایجاد شده توسط EF است. علت این مشکل هم عدم دخالت برنامه نویس در کوئری ایجاد شده توسط EF می باشد.

حتی در مواردی که برنامه نویس تسلط کاملی روی قابلیت های EF ندارد ممکن است کوئری هایی را به سمت دیتابیس ارسال نماید که موجب کندی سیستم گردد. در این نوشته قصد دارم درباره مشکلاتی که در زمان استفاده از EF در حوزه کارایی رخ می دهد بحث کرده و راهکارهایی که موجب افزایش کارایی سیستم گردد را بررسی نمایم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *