۱۳۸۹/۰۵/۲۹

نحوه‌ي مشاهده‌ي خروجي SQL توليد شده توسط WCF RIA Services


اين روزها با وجود ORMs ، كوئري SQL‌ نوشتن شبيه به دوراني شده كه با وجود زبان‌هاي سطح بالا، عده‌اي علاقمند هستند با استفاده از زبان اسمبلي برنامه نويسي كنند! WCF RIA Services به صورت پيش فرض از entity framework استفاده مي‌كند (هر چند مي‌توان از ساير ORMs هم استفاده كرد)، بنابراين عنوان صحيح‌تر بحث اين خواهد بود: چگونه خروجي SQL توليد شده توسط Entity framework را بررسي كنيم؟

الف) استفاده از SQL Server profiler
اولين برنامه‌اي كه از سال‌ها قبل، حتي پيش از ظهور ORMs وجود داشته، برنامه‌ي SQL server profiler است، كه عموما در مسير ذيل قابل دستيابي است:
Start Menu->Programs->Microsoft SQL Server 2008->Performance Tools->SQL Server profiler



نكته مهم:
حين كار با SQL Server profiler ، ممكن است انبوهي از كوئري‌هاي ديگر مثلا مرتبط با SQL Server agent يا reporting services و غيره نيز لاگ شوند. اما الان ما تنها به كوئري‌هاي برنامه‌ي خود نياز داريم. براي اين منظور به كانكشن استرينگ خود، گزينه‌ي Application Name=My Application Name را نيز اضافه كنيد:

<connectionStrings>
<add name="dmEntities" connectionString="metadata=res://*/Models.dmDataModel.csdl|res://*/Models.dmDataModel.ssdl|res://*/Models.dmDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(local);Initial Catalog=dm;Integrated Security=True;Application Name=My Application Name;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

اكنون اگر برنامه را با پروفايلر مورد بررسي قرار دهيد خروجي به صورت زير خواهد بود:



براي فيلتر كردن Application Name مورد نظر، در ابتداي كار كه يك سشن جديد را آغاز مي‌كنيد به برگه‌ي events selection مراجعه كرده و بر روي دكمه‌ي column filter كليك كنيد. گزينه‌ي application name را در صفحه‌ي باز شده انتخاب نموده و در قسمت Like آن مطابق تصوير زير ، نام برنامه‌ي خود را وارد نمائيد:




ب) استفاده از IntelliTrace در VS.NET 2010
برنامه را در حالت ديباگ در VS.NET 2010 اجرا كنيد. در هر لحظه‌اي مي‌توان روي گزينه‌ي Break all كليك كرد و خروجي SQL توليد شده را نيز علاوه بر اطلاعات ديگر مشاهده نمود:




ج) استفاده از برنامه‌ي حرفه‌اي entity framework profiler
اين برنامه از هر دو مورد قبل كاملتر بوده و اساسا براي لاگ كردن كوئري‌ها، مدت زمان اجرا، گزارشگيري از وضعيت برنامه، كداميك از كوئري‌ها سنگين‌تر هستند، حتي از طريق كدام متد فراخواني شده‌اند، ارائه‌ي گزارشات و راهنمايي‌هايي در مورد چگونگي بهبود كارآيي برنامه‌ي تهيه شده و امثال آن كاربرد دارد.



استفاده از آن هم بسيار ساده است. ابتدا ارجاعي را به اسمبلي HibernatingRhinos.Profiler.Appender.v4.0 به پروژه‌ي ASP.NET خود اضافه كنيد (همان پروژه‌ي هوست مربوط به WCF RIA Service ما). سپس به فايل Global.asax.cs برنامه مراجعه كرده و يك سطر ذيل را اضافه كنيد:

protected void Application_Start(object sender, EventArgs e)
{
HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();
}

از اين پس تنها كافي است برنامه‌ي پروفايلر در حال اجرا بوده و برنامه شما نيز اجرا شود. كليه‌ي تبادلات با ديتابيس لاگ خواهند شد.