Cache کردن اطلاعات ASP.NET MVC
بسم الله الرحمن الرحیم
در این بخش قصد داریم نحوه افزایش سرعت بارگذاری صفحات در ASP.NET MVC را بررسی کنیم.
افزایش سرعت صفحات در ASP.NET MVC
برای افزایش کارایی برنامه های تحت وب Cache کردن اطلاعات بسیار مهم است. کش کردن اطلاعات یک راه برای ذخیره سازی اطلاعاتی است که مجددا باید مورد دسترسی قرار می گیرند. در عمل این یک راه موثر برای افزایش کارایی وب سایت ها است.
مزایای کش کردن اطلاعات
کاهش میزبانی اطلاعات بر روی سرور
هنگامی که شما اطلاعات را بر روی کلاینت یا پروکسی کش می کنید، عملا سرور شما درخواست های کمتری را باید پاسخ دهد.
کاهش فشار بر روی پایگاه داده
وقتی شما اطلاعات را در وب سرور کش کنید، می توانید درخواست ها را از دیتابیس حذف کنید.
کاهش ترافیک شبکه
هنگامی که شما اطلاعات را بر روی کلاینت کش می کنید، ترافیک شبکه شما کاهش پیدا می کند.
حذف زمان ها برای بازیابی اطلاعات تکراری
زمان هایی که صرف استفاده از اطلاعاتی که چندین بار مورد درخواست قرار خواهند گرفت، حذف می شود
افزایش کارایی
هنگامی که اطلاعات را کش می کنید، زمان کمتری برای بازیابی اطلاعات لازم است، ترافیک شبکه کمتر مصرف می شود، به سرور کمتر برای پاسخگویی نیاز خواهد بود و همه این کارهای باعث می شود تا کارایی سایت شما افزایش پیدا کند.
T4MVC
بسم الله الرحمن الرحیم
معرفی T4MVC
T4MVC می تواند بر روی نسخه های Visual Studio 2010, 2012 و 2013نصب شود وASP.NET MVC 4.0 و 5.0این Package را پشتیبانی می کنند، شاید بتوانید بر روی سایر نسخه ها از این Package استفاده کنید اما این Package فقط بر روی گزینه های گفته شده تست شده است.
نصب T4MVC
برای نصب این Package کافی است که دستور زیر را از طریق Package Manager Console اجرا کنید
Install-Package T4MVC
پس از اجرای این دستور دو فایل به پروژه شما اضافه می شود.
هدف T4MVC
این Package برای جلوگیری از نوشتن اسامی کنترلر ها و اکشن ها و در نهایت view ها به صورت Hard Code مورد استفاده قرار می گیرد.
برای مثال کدزیر را در نظر بگیرید:
<% Html.RenderPartial("DinnerForm"); %>
ما از عبارت های رشته ای برای فراخوانی این Partial استفاده کرده ایم، اگر فردا شما بخواهید این نام را تغییر دهید باید در بهترین و سریعترین روش ممکن با استفاده از Finde ویژوال استادیو تمامی نام های مربوطه را تغییر دهید.
اما چرا از ابتدا از روش دیگری استفاده نکنیم!
T4MVC در واقع نام تمامی View,Conreoller,Action ها را به صورت خودکار در خود ذخیره می کند و عملا یک Enumeration برای شما به وجود می آورد تا در آینده در صورتی که نامی را برای یک View,Conreoller,Action عوض کردید، این نام در تمامی پروژه عوض شود.
مثال:
<% Html.RenderPartial("DinnerForm"); %>
از این به بعد ما نام ها را به صورت زیر خواهیم نوشت:
<% Html.RenderPartial(MVC.Dinners.Views.DinnerForm); %>
fluent API در Code First
بسم الله الرحمن الرحیم
fluent API
در MVC برای ایجاد روابط بین جداول می توانید از fluent API استفاده کنید، این روش برای کد نویسی و طراحی دیتابیس به روش Code First می باشد:
One-to–Zero-or-One (روابط یک به یک)
modelBuilder.Entity<OfficeAssignment>()
.HasKey(t => t.InstructorID);
به رابطه بالا One-to–Zero گفته می شود زیرا شما فقط کلید اصلی جدول را مشخص کرده اید آن را به هیچ جدول دیگری ارتباط نداده اید.
modelBuilder.Entity<OfficeAssignment>()
.HasRequired(t => t.Instructor)
.WithOptional(t => t.OfficeAssignment);
در این رابطه ما یک رابطه One-to-One ایجاد کرده ایم. در این رابطه سمت OfficeAssignment اختیاری است.
Strongly typed
بسم الله الرحمن الرحیم
Strongly typed
زبان های Strongly typed به شما اجازه نمی دهند که از یک نوع به نام یک نوع دیگر استفاده کنید. مثلا string به int
در Strongly typed به صورت اتوماتیک یک نوع به نوع دیگر تبدیل نمی شود. مثلا در زبان Perl می توانید یک رشته
شامل "123" در یک numeric قرار دهید و این به صورت اتوماتیک تبدیل به 123 می شود اما زبان های strongly typed این کار را انجام نمی دهند مثلا python یک زبان strongly typed است.
طبیعتا خطاهای زیادی را در هنگام کار کردن با سی شارپ مخصوصا LINQ در ارتباط با strongly typed مشاهده کردید:
مثال
var answer = 1 * "1";
این دستور اجرا نمی شود، بلکه شما باید خودتان به صورت صریح تبدیل نوع را انجام دهید.
اما در PHP دستور زیر اجرا می شود:
بروز رسانی دیتابیس و خطا One or more validation errors were detected during model generation
بسم الله الرحمن الرحیم
بروز خطای
An exception of type 'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: One or more validation errors were detected during model generation:
یا خطای
One or more validation errors were detected during model generation:
پس از اجرای کد زیر
آموزش ASP.NET Identity
بسم الله الرحمن الرحیم
آموزش Asp.net Identity MVC (بخش اول)
آموزش Asp.net Identity (بخش دوم)
آموزش Asp.net Membership (رفع خطا)
برای شروع کار Visual Studio را باز کنید سپس New-> project را انتخاب کنید و در پنجره باز شده مانند زیر NET framework 4.5 را انتخاب کنید و سپس بر روی گزینه ASP.NET Web Application کلیک کنید.
حال گزینه Emprty را انتخاب کنید و سپس نوع پروژه را از بخش پایین MVC انتخاب نمایید تا پروژه شما ایجاد شود.
Entity Farmework و Code First
بسم الله الرحمن الرحیم
برای طراحی پایگاه داده به وسیله Entity Farmework و Code First بهتر است این چند نکته را رعایت فرمایید:
بهتر است از نام Id به عنوان نام تمامی کلید های اصلی جداول استفاده کنید هر چند در بحث
convention over configuration این نکته مورد قبول است اما چیزی را که همه آن را به عنوان یک قرارداد نانوشته قبول دارند را عوض نکنید تا برای انجام کار توضیحاتی لازم نباشد.
بهتر است از نوع GUID برای کلید های اصلی جداول استفاده کنید. نوع int از لحاظ واکشی اطلاعات سریعتر است زیرا مقایسه عددی سریعتر از مقایسه رشته ای است.
باید در نظر داشته باشید در جداولی مثل شهر، استان، کشور می توانید از نوع int برای کلید اصلی استفاده کنید و هیچ مشکلی نخواهد بود اما بهتر است برای جداول اطلاعاتی که شماره ها بسیار ارزشمند هستند و بهتر است در کل دیتابیس عدد منحصر به فرد باشد از نوع GUID استفاده شود.
بهتر است نام کلیدهای خارجی یک نام از جدول + کلمه ای دی باشد:
بازیابی دیتابیس (Restore) به وسیله EntityFarmework
بسم الله الرحمن الرحیم
در پروژه های MVC شما نیاز خواهید پیدا کرد که دیتابیسی که به وسیله Entity Framework (معمولا در روش Code First) تغییر پیدا کرده است را به حالت قبل بازیابی کنید.
به ازای هر بار درخواست تغییر دیتابیس توسط EF یک شماره منحصر به فرد ایجاد می شود که می توانید در دیتابیس خود در تیبل Migration__ این پارت ها را مشاهده کنید.
برای برگرداندن دیتابیس خود به مرحله قبل می توانید به صورت زیر عمل کنید:
Update-Database -Target 2556
2556 شماره حالتی است که قبل از اعمال تغییرات ثبت شده بوده است.
اضافه کردن فیلد nullable در دیتابیس با EF
بسم الله الرحمن الرحیم
اگر بخواهید پرا