ردیابی فراخوانی ها با تگ کوئری در Entity Framework

شنبه 2 شهریور 1398

یکی از مشکلات Entity Framework موفق نبودن در ردیابی اپلیکیشن صادر کننده SQL است، در این مطلب قصد داریم بیشتر درباره این مشکل Entity Framework صحبت کنیم.

 ردیابی فراخوانی ها با تگ کوئری در Entity Framework

چند سال گذشته از زندگی من با  Entity Framework گذشته است، من در طول این سال ها تعداد زیادی DBA( سرورهای بانک اطلاعاتی) را اجرا کرده ام که Entity Framework اصلا علاقه ای به آن ها ندارد.


یکی از مهم ترین مشکلات Entity Framework

یکی از مهمترین دلایلی که بسیاری از افراد Entity Framework را دوست ندارند به این دلیل است که آن ها در حین استفاده از LINQ هیچ گونه کنترلی ندارند و به نظر من نمی تواند یک روش کارآمد برای بازیابی اطلاعات باشد.

البته من دلیل دیگری نیز برای نداشتن علاقه به این موضوع می توانم برای شما ارائه دهم:

-          خواندن سخت و درهم SQL

-          بازیابی به صورت تک ستونه از هر کوئری

-          نمی داند که کدام اپلیکیشن این SQL را ارسال کرده است


یک نکته مهم درباره Entity Framework

سومین موردی که بیان کردم اصلی ترین دغدغه من در هنگام کار کردن با DBA در طول این سال ها بوده است. تهاجم های زیادی به Entity Framework صورت گرفته است چرا که اگر برای یک کوئری مشکلی به وجود می آمد هیچ راهی وجود نداشت که به دیتابیس بگویید که این کوئری از کدام یک از اپلیکیشن ها گرفته شده است و در واقع هیچ دستوری برای انجام این کار وجود نداشت.

امروزه روش های مختلفی برای انجام این کار وجود دارد که از جمله آنها می توان به اجرا و ذخیره به صورت رویه ای توسط این فریم ورک به عنوان یک مورد ساده اشاره کرد.

حال بهتر است شما نیز کمی فکر کنید، چگونه می توانید بگویید که کدام برنامه دستور SQL را ارسال کرده است؟

 Entity Framework


وارد کردن تگ های کوئری

در این جا یک خبر خوب و یک خبر بد وجود دارد.

خبر خوب این است که تگ های کوئری در نسخه Entity Framework Core 2.2 معرفی شدند.

خبر بد این است که شما از آن تنها در Entity Framework Core 2.2  و یا نسخه های بالاتر می توانید استفاده کنید. این ویژگی می توانست یک ویژگی فوق العاده در نسخه های قبلی این فریم ورک باشد.

تگ های کوئری یک ویژگی جدید EF Core 2.2 هستند که دقیقا همان چیزی هستند که شما از آن ها انتظار دارید. این ویژگی در واقع زمانی که یک کوئری به دیتابیس ارسال می شود کامنت هایی را به SQL شما اضافه می کند.

به عنوان مثال کوئری زیر را در نظر بگیرید:

var nearestFriends =

    (from f in context.Friends.TagWith("This is my spatial query!")

       orderby f.Location.Distance(myLocation) descending

       select f).Take(5).ToList();

دستور .Tag With() در واقع کامنت خاصی را به کوئری که به دیتابیس ارسال شده است اضافه می کند تا این موضوع که کدام اپلیکیشن دستور SQL را صادر کرده است را محدود کند که این موضوع شامل موارد زیر است:

-          نام اپلیکیشن و نسخه استفاده شده از آن

-          نام متدی که این دستور را ارسال کرده است

-          لیست پارامترهای موجود

-          نام کاربری که این دستور را ارسال کرده است

به همین علت است که من هیچ گاه یک تمبر زمان و یا تاریخ را به این شکل ارسال نمی کنم چرا که این موارد در هنگام کار کردن و اجرای دستورات به صورت خودکار ذخیره می شود.

یکی از مهم ترین محدودیت های تگ های کوئری این است که آن ها قابل تنظیم نیستند و به همین علت تنها ورودی هایی از نوع رشته را دریافت می کنند.

 Entity Framework


نتیجه گیری

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

این نکته بسیار کوتاه ولی مهم دلیل خوبی به توسعه دهندگانی که Entity Framework را دوست ندارند می دهد تا به این فریم ورک علاقه مند شوند.

 Entity Framework

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید