نظرات مطالب
سفارشی سازی ASP.NET Core Identity - قسمت دوم - سرویس‌های پایه
اگر در داخل موجودیتون، همیشه به یکی از پراپرتی‌های موجود در Shadow properties نیاز دارید برای مثال به CreatedDateTime، همون پراپرتی (ها) رو در داخل موجودیت تعریف کنید و به راحتی در هر کوئری به اون دسترسی پیدا کنید.
public class Category : IAuditableEntity
{
    public int Id { get; set; }

    public Category()
    {
        Products = new HashSet<Product>();
    }
        
    public DateTime? CreatedDateTime { get; set; } //Here

    public string Name { get; set; }

    public string Title { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}
اما اگر فقط یکبار به اون نیاز دارید، از متود های GetShadowPropertyValue و نوع جنریک اون استفاده کنید. 
نظرات مطالب
تنظیمات امنیتی SMTP Server متعلق به IIS 6.0 جهت قرارگیری بر روی اینترنت
یک نکته‌ی تکمیلی: یکی از دلایل رد نشدن ایمیل‌ها
چند روزی بود ایمیل‌های سایت رد نمی‌شدند. تمام موارد بررسی شدند؛ اما ایمیل‌ها در پوشه‌ی C:\Inetpub\mailroot\Queue باقی مانده و ارسال نمی‌شدند. مشخص شد که (احتمالا به دلیل نصب وصله‌های امنیتی جدید سیستم عامل)، تعداد اتصالات قابل قبول توسط SMTP Server، راسا انتخاب (SMTP Virtual Server > Properties > Delivery > Outbound Connections) و به صفر تنظیم شده بود. با لغو این مورد، مشکل برطرف شد:

نظرات مطالب
شروع به کار با EF Core 1.0 - قسمت 11 - بررسی رابطه‌ی Self Referencing
without Cacheable:

with Cacheable:

ساختار موجودیت در DomainLayer :

public class PublicMenu : BaseEntity
    {
        public PublicMenu()
        {
            SubMenus = new List<PublicMenu>();
        }

        public string Title { get; set; }
        public string Url { get; set; }
        public string Icon { get; set; }
        public bool IsShow { get; set; }

        public virtual PublicMenu Menu { set; get; }
        public int? MenuId { get; set; }
        public ICollection<PublicMenu> SubMenus { get; set; }
    }

نظرات مطالب
طراحی افزونه پذیر با ASP.NET MVC 4.x/5.x - قسمت سوم
در پروژه مثال شما در این بخش به عنوان نمونه پلاگین 1 که دارای کلاس News هست رو در نظر بگیرید شما برای ارتباط با کلاس User اومدید سیم کشی مورد نظر رو انجام دادید
  [ForeignKey("UserId")]
  public virtual User User { set; get; }
  public int UserId { set; get; }
به همین خاطر رفرنسی رو به پروژه CommonEntity ارجاع دادید.
خوب حالا اگه قرار باشه  که من Icollection مربوطه به News رو در کلاس User قرار بدم نیاز دارم ارجاعی به پلاگین 1 داشته باشم که باعث خطای Circular Dependency میشه.
چه پیشنهادی برای حل این مشکل وجود داره و چه باید کرد؟ 
نظرات مطالب
Repository ها روی UnitOfWork ایده خوبی نیستند
پیشنهاد بنده برای فرار از نوشتن کدهای تکراری CRUD استفاده از یک سرویس جنریک در پروژه می‌باشد که در کمترین حالتش می‌تونه عملیات Insert و Update و  Delete    رو انجام بده و در متد Select نیز حداقل یک لیست از کل رکوردها خروجی بده.

بدین صورت لایه سرویس یک همچین شکلی میشه :
IGenericService<T>
GenericService<T> : IGenericService

IUserService : IGenericService<User>
UserService : GenericService<User>, IUserService
حال آنکه متدهای Add,Delete,GetAll,Update و بصورت Virtual ایجاد می‌نماییم تا در صورت نیاز (معمولا نیاز خواهیم داشت که متد Update رو در برخی موارد Override کنیم) بتونیم درون کلاس‌ها متدهای را Override کنیم.
بنده این تکنیک در پروژه عملی تست کرده ام و مشکلی نداشته ام
نظرات مطالب
EF Code First #10
زمانی که از EfProfiler استفاده کردم متوجه شدم با توجه به اینکه تمامی موجودیت‌های وابسته به مدل اصلی رو virtual  تعریف کردم زمانی که میخوام تنها لیستی از موجودیت اصلی رو نشون بدم و نیازی به موجودیت‌های وابسته ندارم  درخواست‌های زیادی به دیتا بیس ارسال میشه که ناشی از موجودیت‌های وابسته توی مدلم بود و زمانی که بررسی کردم متوجه شدم هنگامی که عمل Mapping  توسط AutoMapper انجام میشه این درخواست‌ها ارسال میشن و قبل از عمل Mapping  تنها یک درخواست جهت دریافت مدل اصلی است.ممنون میشم راهنماییم کنید چطور میتونم این مشکل رو حل کنم. 
نظرات مطالب
ASP.NET MVC #19
- یک partial view به نام مثلا SidebarMenu ایجاد می‌کنید؛ جهت رندر قسمت منو با هر محتوا و روشی که صلاح می‌دانید.
- سپس یک کنترلر مخصوص آن ایجاد می‌کنید که این partial view را ارائه دهد:
    public partial class SidebarMenuController : Controller
    {
        const int Min15 = 900;

        [ChildActionOnly]
        [OutputCache(Duration = Min15)]
        public virtual ActionResult Index()
        {
            return PartialView(viewName: MVC.Shared.Views._SidebarMenu);
        }
    }
به عمد توسط ChildActionOnly مزین شده تا مستقیما قابل فراخوانی نباشد.
- در آخر در فایل layout خواهید داشت:
@{Html.RenderAction(result: MVC.SidebarMenu.Index());}

یک نکته‌ی تکمیلی:
مسیردهی‌های خاص فوق از T4MVC استفاده می‌کنند.
نظرات مطالب
ASP.NET MVC #6
در اصل تمام این‌ها نیاز به وهله سازی دارند. اما برای ساده‌تر شدن کار، در کلاس پایه Controller، این وهله سازی‌ها صورت گرفته (^) و یک متد اضافی برای آن‌ها تعریف شده‌است. به این صورت به نظر می‌رسد که وهله سازی انجام نمی‌شود؛ ولی در اصل این‌کار محول شده به متدهای کمکی کلاس پایه کنترلر. برای مثال:
protected internal virtual JavaScriptResult JavaScript(string script)
{
     return new JavaScriptResult { Script = script };
}
در اینجا return new، داخل یک متد کلاس پایه محصور شده‌است.
نظرات مطالب
ASP.NET MVC #18
با سلام؛
User.Identity.Name  وقتی که RedirectToAction به همون کنترلی که هستیم انجام میدیم کار نمیکنه؟ 
تو این اکشن
public ActionResult DeleteMessage( int id )
        {
            _messageService.DeleteMessage(id , User.Identity.Name);
            return RedirectToAction(MVC.User.SendMessages());
        }
وقتی به اکشن مقصد میره
public virtual ActionResult SendMessages()
{
    string s = User.Identity.Name;// Error : Object reference not set to an instance of an object.
    return View(_messageService.SendMessageListUser(User.Identity.Name));
}
تو جایی که کامنت کردم ارور میده و  User.Identity.Name رو نال بر میگردونه! بقیه جاها از User.Identity.Name استفاده میکنم و هیچ مشکلی نیست!
با تشکر 
نظرات مطالب
Func یا Expression Func در EF
اوایل که از Entity Framework استفاده میکردم دچار همین مشکل شدم. در یک برنامه تمام متدهای دارای شرط لایه سرویسم رو با استفاده از Func پیاده سازی کرده بودم و بعد از مدتی متوجه شدم که برای دریافت یک رکورد از جدول هم برنامه خیلی کند عمل میکنه. کد زیر رو نگاه کنید:
public virtual TEntity Find(Func<TEntity, bool> predicate)
{
    return _tEntities.Where(predicate).FirstOrDefault();
}

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