‫۶ سال و ۵ ماه قبل، سه‌شنبه ۷ فروردین ۱۳۹۷، ساعت ۱۸:۰۸
زمانی که یکسری شیء از کلاسی وهله سازی می‌شوند، هر کدام از آنها در فضای منحصر به فردی نگهداری می‌شوند که آن آدرس را می‌توان به عنوان شناسه منحصر به فرد یا همان Identity یک شیء در نظر گرفت.
‫۶ سال و ۶ ماه قبل، دوشنبه ۱۴ اسفند ۱۳۹۶، ساعت ۱۲:۴۴
با بازنویسی متد FormatErrorMessage مربوط به RequiredAttribute هم میتوانید به نتیجه مشابه دست پیدا کنید. به شکل زیر:
    public class LocalizedRequiredAttribute : RequiredAttribute, IClientValidatable
    {
        private readonly string _resourceKey;
        public string SourceName { get; set; } = LocalizationSourceNames.Default;

        public LocalizedRequiredAttribute(string resourceKey)
        {
            _resourceKey = resourceKey;
        }

        public override string FormatErrorMessage(string name)
        {
            return LocalizationHelper.GetString(SourceName, _resourceKey);
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            yield return new ModelClientValidationRequiredRule(FormatErrorMessage(null));
        }
    }
Raise کردن یک Event در زمان ثبت لاگ و Subscribe کردن به این Event و در نهایت در بدنه EventHandler مربوطه، کلاینت‌های متصل به هاب را Notify کنید.
پیشنهاد میکنم مباحث Domain Events را پیگیری کنید. 
قبلا پیاده سازی از Domain Events در مخزن گیت هاب خود قرار داده ام، می‌توانید از آن هم برای دید گرفتن استفاده کنید.  
‫۷ سال و ۱۰ ماه قبل، جمعه ۲۱ آبان ۱۳۹۵، ساعت ۰۴:۲۲
سلام؛ با توجه به پیاده سازی‌های 3 روش، میتوان نتیجه گرفت که تفاوت اصلی آنها مربوط است به محلی که شماره ورژن ارسال میشود. میتوان یک RouteConstraint در نظر گرفت که به عنوان نمونه هم در هدری مشخص (api-version) و هم در هدر Accept از دل Mime Type، ورژن را جستجو کرد.
‫۸ سال و ۱ ماه قبل، جمعه ۲۲ مرداد ۱۳۹۵، ساعت ۰۴:۳۵
نکته: این روش محدودیت هایی هم دارد:
using (var db = new BloggingContext()) 
{ 
    using (var trn = db.Database.BeginTransaction()) 
    { 
        db.Blogs.Add(new Site { Url = "http://msdn.com/data/ef" }); 
        db.Blogs.Add(new Site { Url = "http://blogs.msdn.com/adonet" }); 
        db.SaveChanges(); 
 
        db.Blogs.Add(new Site { Url = "http://twitter.com/efmagicunicorns" }); 
        db.SaveChanges(); 
 
        trn.Commit(); 
    } 
}
امکان اجرای تراکنش هایی به صورت بالا وجود ندارد.
‫۸ سال و ۳ ماه قبل، جمعه ۱۱ تیر ۱۳۹۵، ساعت ۰۴:۰۴
شما خصوصیتی به نام FK_User_Id  در مدل مورد نظر دارید؟ دقیقا باید نام خصوصیت را مشخص کنید. یعنی اگر خصوصیت مورد نظر UserId هست، باید نام آن را قید کنید؛ نه نام دیگری.
با این حال به صورت قراردادی روش زیر جواب میدهد برای دسترسی به کلید خارجی و نیازی به معرفی صریح ندارید:
public calss Test
{
   public User User {get;set;}
   public int UserId {get;set;}
}

public class User
{
 public int Id {get;set;}
 //some properties
}

‫۸ سال و ۳ ماه قبل، دوشنبه ۷ تیر ۱۳۹۵، ساعت ۰۵:۱۸
ممنونم.
البته که مقالات رو مطالعه کرده بودم.
 شاید استفاده از یک فایل تیبل برای اینگونه سناریو‌ها خیلی مفید باشد. به شکلی که یک فایل تیبل ایجاد میشود و  از آن صرفا به عنوان مخزنی که تمام فایل‌ها در آنجا قرار بگیرند، استفاده میشود. بعد از آن میشود خواندن و نوشتن در این پوشه رو با API‌های مرتبط با win32 انجام داد. در این صورت هم اگر معماری پروژه به گونه ای باشد که بخش ادمین و API هم از پروژه اصلی بیرون کشیده شده و جدا هاست خواهند شد، به صورت مشترک میتوانند به این فایل‌ها دسترسی داشته باشند.
‫۸ سال و ۳ ماه قبل، جمعه ۴ تیر ۱۳۹۵، ساعت ۰۷:۵۱
برای سناریویی که تصاویر زیادی لازم است در هر بار واکشی ( مانند یک گالری تصاویر که حجم آنها بالاتر از 256 کیلو بایت) نمایش داده شوند، آیا باز هم استفاده از این روش پیشنهاد میشود؟ با توجه به اینکه به دلیل اجرای کوئری برای واکشی بایت‌های مرتبط با هرکدام از فایل‌ها نسبت به حالت استفاده از فایل سیستم معمولی کند‌تر خواهد بود.
البته با در نظر گرفتن مباحث کشینگ.
‫۸ سال و ۴ ماه قبل، پنجشنبه ۶ خرداد ۱۳۹۵، ساعت ۰۸:۱۷
یک همچین کدهایی هم باعث ایجاد دوباره پلن مربوط به کوئری خواهند شد:
using (var context = new MyContext())
{
    var myObject = new NonMappedType();

    var query = from entity in context.MyEntities
                where entity.Name.StartsWith(myObject.MyProperty)
                select entity;
 
   var results = query.ToList();
    ...
}
معادل بهینه شده کد بالا:
using (var context = new MyContext())
{
    var myObject = new NonMappedType();
    var myValue = myObject.MyProperty;
    var query = from entity in context.MyEntities
                where entity.Name.StartsWith(myValue)
                select entity;

    var results = query.ToList();
    ...
}
در پروژه Decision خیلی از این نوع موارد پیاده سازی شده است که میبایست اصلاح شوند. برای مثال متد های GetPagedListAsync.