‫۱۱ سال و ۳ ماه قبل، سه‌شنبه ۲۵ تیر ۱۳۹۲، ساعت ۰۳:۳۴
در سایت جاری تمام لیست‌های عمومی رو که مشاهده می‌کنید (از فیدها تا مطالب تا نظرات و همه) از سطح دوم کش در EF استفاده می‌کنند. این مورد برای کاهش فشار بر روی دیتابیس با تعداد بازدیدکننده بالا مفید است.
‫۱۱ سال و ۳ ماه قبل، سه‌شنبه ۲۵ تیر ۱۳۹۲، ساعت ۰۳:۰۵
در حین لاگین شما SetAuthCookie رو به userName تنظیم کردید. بعد نتیجه‌اش این شده، هرجایی که نیاز به یافتن Id کاربر بوده، مجبور هستیم یکبار کوئری بگیریم و این مورد زیاد در برنامه وجود داره. بهتره در زمان فراخوانی SetAuthCookie، مقدار userId رو که داریم به عنوان پارامتر بهش پاس بدیم. به این ترتیب در خیلی از جاها جلو خواهیم افتاد.
مثلا الان اکثر کلاس‌های موجودیت‌ها چنین تعریفی رو دارند:
 public class SomeName
{
    public virtual User User { get; set; }
}
میشه کمی این تعریف رو اصلاح کرد و بجایش نوشت:
   [ForeignKey("UserId")]
  public virtual User User { set; get; }
  public int? UserId { set; get; }
حالا موقع ست کردن اطلاعات این کلاس، دیگر نیازی نیست تا یکبار id کاربر از دیتابیس Find شود (چون در User.Identity.Name موجود هست؛ مهم نیست که Name اینجا داره، مهم کاربرد آن است در برنامه). فقط کافی هست این مقدار به UserId نسبت داده شود.
تقریبا اکثر کلاس‌های دومین شما نکته کار با کلیدهای خارجی رو جهت کاهش رفت و برگشت به دیتابیس ندارند.
‫۱۱ سال و ۳ ماه قبل، سه‌شنبه ۲۵ تیر ۱۳۹۲، ساعت ۰۲:۳۱

سلام؛ لایه سرویس رو که بررسی می‌کردم از متد Find بدون بررسی نال بودن آن تقریبا در همه جا استفاده شده. یک نمونه برای مثال:

 _posts.Find(id).VisitedNumber += 1;

این مورد باید در تمام کلاس‌های لایه سرویس بررسی و اصلاح بشه. یعنی ابتدا بررسی شود اگر نال نبود آنگاه از خاصیت  شیء نهایی دریافتی استفاده شود.

‫۱۱ سال و ۳ ماه قبل، چهارشنبه ۱۹ تیر ۱۳۹۲، ساعت ۱۹:۵۱
با سلام

بعد از اینکه برنامه رو در ویژوال باز میکنم و با nuget پکیج‌ها رو آپ دیت میکنم ارور نشناختن Reference مربوط به Persia رو میده!

از کجا و کدوم نسخه رو باید دانلود کرد؟
‫۱۱ سال و ۳ ماه قبل، چهارشنبه ۱۲ تیر ۱۳۹۲، ساعت ۰۵:۵۶
این پروژه بدون مشکل در VS 2010 کامپایل می‌شود اگر فایل sln آن اندکی ویرایش شده و Format Version آن 11 شود.
سپس یک نکته: اگر حین کامپایل این پروژه به خطای زیر برخوردید (خصوصا در VS2010 البته):
 Assembly 'Iris.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
uses 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 
which has a higher version than referenced assembly
'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
این خطا مربوط است به تنظیم زیر:
 <MvcBuildViews>true</MvcBuildViews>
از این جهت که یک سری از وابستگی‌های این پروژه هنوز از MVC3 استفاده می‌کنند مانند:
 Reference: System.Web.Mvc
 4.0.0.0 by CaptchaMvc
 3.0.0.0 by Elmah.Mvc
 4.0.0.0 by Iris.DomainClasses
 4.0.0.0 by Iris.Model
 4.0.0.0 by Iris.Web
 3.0.0.0 by Iris.Web
 3.0.0.0 by LowercaseRoutesMVC
 3.0.0.0 by LowercaseRoutesMVC4
 3.0.0.0 by MiniProfiler
 3.0.0.0 by MvcSiteMapProvider
 3.0.0.0 by T4MVCExtensions
این لیست توسط برنامه AsmSpy تولید شده. (شماره نگارش‌های این لیست متناظر هستند با شماره نگارش System.Web.Mvc استفاده شده در اسمبلی متناظر)

راه حل:
وب کانفیگ را باز کنید و چند سطر ذیل را به مدخل compilation اضافه نمائید:

    <compilation debug="true" targetFramework="4.0" >
      <assemblies>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      </assemblies>
    </compilation>
به علاوه قسمت assemblyBinding آن نیز، به نحو زیر نیاز به اصلاح دارد. فرقی هم نمی‌کند که از چه نگارشی استفاده می‌کنید (باید به MVC4 ارتقاء داده شود):

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
           <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
           <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />             
      </dependentAssembly>
      <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
           <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="4.0.0.0" />             
      </dependentAssembly>
      <dependentAssembly>
           <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
           <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />             
      </dependentAssembly>
      <dependentAssembly>
           <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-4.4.0.0" newVersion="4.4.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.3.0" newVersion="3.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>