Entity framework یکی از بهترین ORM های برای ایجاد لایه BLL پروژه های asp.net است. امروزه روز تقریبا همه برنامه نویسان کدهای ADO.Net عهد عتیق رو فراموش کرده اند و همه با Entity framework کد می زنن.
با توجه به سنگین بودن گرید ویو امروزه روز دیگه هیچکس با گریدویو کار نمی کنه و برنامه نویسان حرفه ای با رپیتر کار می کنن، یکی از مشکلات رپیتر اینه که صفحه بندی نداره و خود برنامه نویس باید یک سیستم صفحه بندی براش بنویسه. خوب شاید با خودتون بگین که مگه دیوانه ایم ، گریدوبو به اون خوبی که خودش صفحه بندی هم داره رو بذاریم کنار و بعد بیایم با رپیتر و سایر کنترل های داده ای کار کنیم که صفحه بندی نداره ! و بعدشم کلی کد واسه صفحه بندی اطلاعاتمون بزنیم!
در جواب باید خدمتتون عرض کنم که فرض کنین که تیو یک جدول 1000 تا رکورد داریم (داده) ، حال می خواهیم با گرید ویو این 1000 رکورد رو بصورت صفحه بندی و در هر صفحه 10 رکورد رو نمایش بدیم ، در این حالت سیستم صفحه بندی گرید ویو بدین صورته که اول همه 1000 تا رکورد رو از دیتابیس باید بگیریم و به گریدویو بدیم؛
بعد گریدویو فقط 10تاشو تیو صفحه نمایش میده!
البته گرید ویو اطلاعات رو کش می کنه و هر دفعه نیاز نیست که با هر بار PostBack شدن صفحه ، اطلاعات رو مجدد از دیتابیس بگیریم و بهش بدیم، ولی با این حال هنوز مشکل دریافت 1000 رکورد از دیتابیس و تحویل اون به گرید ویو به قوت خودش باقی است.
حال فرض کنین که سایت شما روزی 10000 تا بازدید کننده داشته باشه، هر بازدید کننده مگر چند تا صفحه از مطالب شما رو می خونه ؟
آیا نیازه که واسه هر بازدید کننده 1000 تا رکورد از دیتبایس دریافت بشه ؟ در حالی که شاید نهایتا بازدید کننده 2-3 صفحه اول مطالب رو بخونه ؟
این مشکل باعث رد و بدن شدن حجم بالایی از اطلاعات بین وب سرور و SQL سرور میشه که زیاد حرفه ای به نظر نمیرسه!

بدین دلیل است که برنامه نویسان حرفه ای و اونایی که به بهینه بودن کدهاشون و سرعت سایت هاشون اهمیت میدن، روش استفاده از پروسیجر رو پیش گرفتند.
بدین صورت که شما یک پروسیجر می نویسین که 2 تا ورودی می گیره:
  1. شماره صفحه
  2. تعداد رکوردهایی که می خواین توی هر صفحه نمایش بدین

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

بدین صورت که اگر من بهش عدد 2 و 10 رو به ترتیب بدم، پروسیجر 10 تا رکورد دوم رو بهم میده (یعنی 10 تا رکورد اول رو بی خیال میشه و 10 تای بعدی رو به من میده) و اگر مقدار 5 و 10 رو بدم ، 10 تا رکورد پنجم رو بهم میده (یعنی 40 تا رکورد اول رو بی خیال میشه و 10 تای بعدیش رو به من میده)

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

شروع عرصه Entity framework :

با شروع همه گیر شدن Entity framework برنامه نویسان دیگه کم کم پروسیجر رو فراموش کردند و تقریبا همه کدهایی که یک زمانی باید براشون پروسیجر می نوشتیم و کلی کد سی شارپ هم براش می نوشتیم تا بتونیم از اون پروسیجر ها استفاده کنیم، خدا بیامرز شدن و همه اون همه کد با یک خط کد ساده بوسیله Entity framework انجام میشه

صفحه بندی اطلاعات در Entity framework با کمک دو دستور ()Skip و ()Take انجام میشه.

حال یکی از سوتی هایی برنامه نوییسان در حین کار با این دستورات میدن اینه که دستورات خودشونو بصورت زیر می نویسن:


کد سی شارپ بالا که با دستورات Lambda نوشته شده(1)  در دید اول ممکنه به نظر درست بیاد، در این کد من خبرهای دو تا مونده به آخری رو از دیتابیس دریافت کرده ام ؛ بدین صورت که ابتدا خبر ها رو از آخر به اول چینش کرده ام و سپس اولین خبر بالای لیست رو بی خیال شده ام (از روش پریده ام) و 2 خبر بعدیش رو دریافت کرده ام.

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

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


ملاحظه می کنین که در اصل ما همه رکوردها رو داریم از دیتابیس می گیریم و بعد توس سمت سی شارپ (وب سرور) داریم 2 تاشو جدا می کنیم و این یعنی اینکه ما داریم سر خودمونو کلاه میزاریم و در اصل همه رکوردها داره از دیتابیس دریافت میشه که این اصلا بهینه نیست !

روش صحیح کد نویسی برای صفحه بندی ، بدین صورته:


با اجرای این کد ، دستور زیر بروی دیتابیس اجرا می شود:


ملاحظه می کنین که دقیقا 2 رکورد مورد نظر از دیتابیس دریافت شده است.
نکته مهمی که از این آزمایش می توان نتیجه گرفت این است که همیشه اول Skip  و Take رو بنویسین و بعد دستور ToList رو بنویسین.
این نکته ممکنه خیلی ساده به نظر بیاد ، ولی توی سرعت پروژتون خیلی تاثیر داره.
وقتی کدای یک پروژه رو بررسی می کردم به این نکته پی بردم، برای همین اینجا نوشتم که همه بهره ببرند.
موفق باشید.

نوشته شده در تاریخ چهارشنبه 3 اردیبهشت 1393    | توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     | نظرات()