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

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

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

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

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

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

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

var list =
en.News.OrderByDescending(c => c.Id).ToList().Skip(1).Take(2);

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

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

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

SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
FROM [dbo].[News] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
ملاحظه می کنین که در اصل ما همه رکوردها رو داریم از دیتابیس می گیریم و بعد توس سمت سی شارپ (وب سرور) داریم 2 تاشو جدا می کنیم و این یعنی اینکه ما داریم سر خودمونو کلاه میزاریم و در اصل همه رکوردها داره از دیتابیس دریافت میشه که این اصلا بهینه نیست !

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

var list =
en.News.OrderByDescending(c => c.Id).Skip(1).Take(2).ToList();

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

SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
FROM ( SELECT [Extent1].[Id] AS [Id],
      [Extent1].[Title] AS [Title],
      row_number()
      OVER (ORDER BY [Extent1].[Id] DESC) AS [row_number]
      FROM [dbo].[News] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 1
ORDER BY [Extent1].[Id] DESC

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

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

ارسال به 100 درجه کلوب دات کام   این مقاله رو به دوستات توی کلوب معرفی کن

    برچسب ها: بزرگترین سوتی برنامه نویسی Entity Framework برنامه نویسان وب، نکته مهم entity frame work، آموزش entity frame work، استفاده از skip و take در entity framework، صفحه بندی در entity framework، صفحه بندی اطلاعات در entity framework، صفحه بندی در entityframework، 

| توسط: ح.م    | طبقه بندی: آموزش Entity Framework،     |
nHibernate یا EntityFramework مسئله این است!
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
با سلام.
در پروژه های نرم افزاری ، کار با اطلاعات موجود در دیتابیس بخش اصلی پروژه رو تشکیل میده و حدود 30 تا 40 درصد زمان پروژه ها نیز صرف نوشتن کدهای این بخش می شود، حال آنکه بخش اعشم این کدها یک روال تکراری را دنبال می کنند (همانند نوشتن یک سری کلاس که دارای یک سری پراپرتی می باشند و نوشتن متدهای معروف   Select-Add-Update-Delete و .)
حال آنکه یک ORM می تواند همه این کدهای زمان بر و خسته کننده را به راحتی و بصورت خیلی بهینه و تمیز برای شما بنویسند

nHibernate و Entityframework دو عدد ORM بسیار معروف هستند که اولی بصورت سورس باز می باشد و دومی متعلق به شرکت مایکزوسافت است.

nHibernamte بسیار قدیمی تر از  Entityframework است و چندین سال قبل از بوجود آمدن Entityframework بوجود آمده است و برنامه نویسان قدیمی اکثرا با این ORM کار می کردند و لایه های DataAccess خود را با آن می نوشتند .

کار کردن با nHibernate نیاز به تجربه و علم بیشتری دارد و یکم سخت تر هم هست ولی کار با Entityframework بسیار راحت است ، بطوری که بچه 5 ساله هم می تونه باهاش کار کنه!

حال برخی به NH اعتقاد دارند و برخی به EF و همیشه سر این دو گروه جنگ و دعوای بسیار بوده است .

در اینجا دو آدرس جهت دوستان معرفی می گردد که خواندنش می تونه جواب بسیاری از سوالات شما را بدهد :

    کامنت جناب نصیری در سایت دات نت تیپس درباره مزایای EF نسبت به NH
    مقاله مقایسه ای یکی از برنامه نویسان با تجربه در این زمینه

باز اگر لینک خوبی پیدا کردم ؛ توی همین پست قرار میدم

دوستان توجه داشته باشند که من از خودم هیچی نگفتم ، چون با NH کار نکردم که بتونم نظر خودم رو بگم و دو لینکی که گذاشتم از دو شخص با تجربه است که هر دو با EF و NH کار کرده اند

یا حق

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

    برچسب ها: NH یا EF ؟، nhibernate یا entityframework، فرق nhibernate و entityframework، تفاوت بین nhibernate یا entityframework، کدام بهتر است ؟ nhibernate یا entityframework، 

نوشته شده در تاریخ دوشنبه 21 بهمن 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش Entity Framework،     | نظرات(3)
آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net - بخش سوم

در آموزش های قبلی برخی روش های دریافت اطلاعات از دیتابیس و نمایش اون در صفحات رو آموزش دادم.
امروز می خوام  روش های دیگر دریافت اطلاعات از دیتابیس (ado.net) رو آموزش بدم.

3- با استفاده از Entity Framework عزیز دلم

البته به زودی یک تالار مخصوص Entity Framework باز می کنم و بصورت کامل کامل این تکنولوژی عزیز و دوست داشتنیمو آموزش میدم.


در این روش ابتدا شما باید Add New Item بزنین و بعد یک فایل از نوع ADO.Net Entity Data Model به پروژتون اضافه می کنین و اون رو روی دیتابیستون تنظیم می کنین و Next میزنین تا آخر.
(اول کانشکن جهت اتصال به دیتابیس رو می گیره و بعد لیست تمامی جداول و پروسیجر های دیتبایستون رو میاره که همه رو تیک میزنین و تمام)

* دریافت یه عالمه دیتا (چندین سطر) از دیتابیس:

با فرض اینکه من مدلم رو با نام MyModel ساخته ام و entity خودمو هم با نام MyEntities ساخته ام، داریم:

ابتدا مدلم رو به صفحه ام اضافه می کنم:
using MyModel;

سپس در رویداد لود داریم :
using (MyEntities en = new MyEntities())
{
  GridView1.DataSource = en.Members;
  GridView1.DataBind();
}

با توجه به حجم کم کدهای من ، فکر می کنم دلیل علاقه شدید بنده رو درک کرده باشید


* دریافت یک رکورد (یک سطر) از دیتابیس:
using (MyEntities en = new MyEntities())
{
  GridView1.DataSource = en.Members.Where(c => c.Id == 2);
  GridView1.DataBind();
}

شایان ذکر است که کدهای Entity Framework رو به دو صورت میشه نوشت :

1- با دستورات LINQ
2- با دستورات Lambda
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
در بالا من به روش لامبدا نوشتم.
این روش هم کوتاه تره و هم باحال تره و هم اینکه وقتی شما با LINQ دستورات رو بنویسین ، در زمان اجرا این دستوران به زیان لامبدا تبدیل و سپس اجرا میشن ، پس اگر لامبدا کد بزنین هم جذاب تره و هم اینکه یک مرحله کار اجرا جلو می افته و مسلما سرعت اجرای دستوراتتون بالاتر میره.


* دریافت یه مقدار واحد از دیتابیس:
using (MyEntities en = new MyEntities())
{
  // روش اول
  Label1.Text = en.Members.Where(c => c.Id == 2).Select(x => x.Name).Single();
           
  // روش دوم
  Label1.Text = en.Members.Where(c => c.Id == 2).Single().Name;

}

برای دریافت یک مقدار واحد 2 تا راه داریم که در بالا هر دو رو نوشته ام.

در روش اول من پروپرتی مورد نظر رو فقط از دیتابیس گرفته ام؛ این دستور موجب اجرای دستور SQL ای "SELECT Name FROM Members" رو دیتابیس میشه

در روش دوم من همه پروپرتی ها رو از دیتابیس گرفته ام و بعد فقط از Name اون استفاده کرده ام؛ این دستور موجب اجرای دستور SQL ای "SELECT * FROM Members" رو دیتابیس میشه

مسلما روش اول بهینه تره.

امیدوارم که از سری آموزش های روش های واکشی اطلاعات از دیتابیس من خوشتون اومده باشه
سری کامل مقالات آموزش ado.net رو می تونین از اینجا مشاهده نمایید.

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن



    برچسب ها: آموزش ado.net، دریافت اطلاعات از دیتابیس، دریافت اطلاعات از دیتابیس sql، آموزش entity framework، مثال آموزش entity framework، نمونه کد entity framework، 

نوشته شده در تاریخ شنبه 27 مهر 1392    | توسط: ح.م    | طبقه بندی: آموزش ado.net، آموزش Entity Framework، آموزش ASP.NET،     | نظرات(1)
آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net - بخش اول

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

در مقالات قبلی کمی با ado.net آشنا شدیم ، امروز می خوام بصورت کامل و مفصل با انواع روش های دریافت اطلاعات از دیتابیس و نمایش اون درون سایت آشنا بشیم.


این روش ها عبارتند از:

    استفاده از کنترل SqlDataSource : این روش به دلیل اینکه خطاها رو اصلا نمیشه کنترل کرد ، فقط در پروژه های دانشجویی کاربرد داره.
    کد نویسی دستی (ADO.Net) : این روش خود به چند روش قابل انجامه:
        SqlDataReader
        SqlAdapter و DataTable
        Scalar
    با کمک عزیز دل خودم یعنی Entity Framework

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

پخش این مطلب آموزشی در فیس بوک   این مقاله رو به دوستات توی فیس بوک معرفی کن



آموزش کامل انواع روش های واکشی اطلاعات در سی شارپ و asp.net، واکشی اطلاعات از دیتابیس در Asp.net، واکشی اطلاعات از دیتابیس در سی شارپ، آموزش ado.net، آموزش entity framework، 

نوشته شده در تاریخ جمعه 14 تیر 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش ado.net، آموزش Entity Framework،     | نظرات(1)
آموزش رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework

آموزش رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework


دوستانی که با تکنولوژی حرکن می کنن و الان دارن با Entity Framework کد میزنن ، خیلی از مواقع ممکنه که با همچین اروری برخورد کنن.
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
در توضیح باید خدمتتون عرض کنم که بنده 2 روزه دارم با این ارور سرو کله میزنم که طبق چیزی که بنده متوجه شدم ، این ارور موقعی رخ میده که شما یک کد linq روی entity framework تون نوشتین که در خروجیش لیستی از اشیاء رو دارین از دیتابیس دریافت می کنین.

حال اگر بخواهید روی خروجی یک تابعی مثل skip رو اجرا کنین ، از اونجایی که در entity framework تا وقتی که از متغیر خروجی دستورتون استفاده نکنین ، چیزی از دیتابیس دریافت نمیشه ، entity framework بیچاره نمی تونه روی یک متغیر null بیاد و تابعی مثل skip رو اجرا کنه و بنابراین ارور مهلک بالا رو بهتون نمایش میده.

به بیان ساده تر ، در  تا وقتی که خروجی دستور Linq تونو داخل یک کنترل داده ای نریزید و یا با forearch روی خروجی حرکت نکنین ، هیچ اتصالی به دیتابیس انجام نمی پذیره و مسلما از اونجایی که خروجی دستور linkq تون رو که داخل یک متغیر var ریختین ، متغیرتون کاملا خالیه (null).

حالا اینکه شما انتظار دارید که بیاد و روی هیچی (یک متغیر null) یک تابعی رو اجرا کنه ، یک خواست نادرستیه و entity framework درخواست نابجای شما رو با ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection  پاسخ میده.

تا شما باشین درخواست نابجا نکنین :)
سایت نت نیک

رفع ارور مهلک the ObjectContext instance has been disposed and can no longer be used for operations that require a connection در entity framework:

رفع خطا بسیار ساده است ، در entity framework توابعی وجود دارد که موجب می شوند که بلافاصله پس از اجرای این توابع ، اتصال به دیتابیس صورت گیرد و اطلاعات مورد نظر از دیتابیس دریافت گردد.
دستور ()ToList یکی از این توابع است.

کافی است شما قبل از استفاد هاز توابعی مانند skip از این تابع استفاده نمایید تا بلافاصله اطلاعات از دیتابیس دریافت بشه و entity framework بتونه تابع مورد نظر شما رو روی خروجی دیتابیس اجرا کنه.

البته این چیزیه که من بهش رسیدم و ممکنه 100% کامل و درست نباشه ؛
ولی از اونجایی که در این سایت من دارم تجربیات و مطالبی که خودم در حین برنامه نویسی می فهمم رو آموزش میدم ، این امر کاملا طبیعی است که برخی مطالب کامل نباشند.
خوب مشکل من که با این روش حل شد :)
خوب به همین سادگی ، تا آموزشی دگر بدرود

azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com
azsoftir.com
09367292276
azsoftir@gmail.com

انجام پروژه اس کیو ال SQL

پروژه پایگاه داده اکسس اکسز Microsoft access

پروژه های آماده پایگاه داده SQL Server

رو ,دیتابیس ,entity ,، ,com09367292276azsoftir@gmail ,روش ,از دیتابیس ,com09367292276azsoftir@gmail comazsoftir ,comazsoftir com09367292276azsoftir@gmail ,entity framework ,اطلاعات از ,com09367292276azsoftir@gmail comazsoftir com09367292276azsoftir@gmail ,comazsoftir com09367292276azsoftir@gmail comazsoftir ,net، آموزش entity ,azsoftir com09367292276azsoftir@gmail comazsoftir

مشخصات

آخرین ارسال ها

آخرین جستجو ها

مطالب اینترنتی بی اختیاری morizasss منهاج مطالب اینترنتی مطالب اینترنتی غدیر | نرم افزار و دستگاه حضور و غیاب سردار شهید علی اصغر اسدی نازی منگول از زمین تا آسمان