‫۸ سال و ۸ ماه قبل، شنبه ۱۹ دی ۱۳۹۴، ساعت ۰۱:۵۸
"(مثلا به محض ثبت شدن منوهایش به صفحه اصلی افزوده شود) نیاز به جدوالی برای ثبت و مدیریت آنها می‌باشد"
اگر قرار باشد سیستم به صورت ماژولار توسعه داده شود ، لزومی ندارد جدول جدایی برای این مورد در نظر گرفت. راه حل‌های سریعتری هم هست ازجمله ذخیره اطلاعات آنها در فایل‌های XML یا حتی خیلی ساده‌تر از آن ، ذخیره نام سیستمی ماژول‌های فعال شده توسط مدیریت در قالب یک رکورد در جدول Setting سیستم که دارای دو فیلد Key و Value میباشد.
‫۸ سال و ۸ ماه قبل، جمعه ۱۸ دی ۱۳۹۴، ساعت ۱۶:۵۲
ممنونم ؛ همانطور که آقای محسن خان فرمودند ، فعلا بنده سعی دارم بخش‌های مختلف که مد نظر هست را تحلیل کنم و این مدل‌های به دست آماده ، در آینده هم مانع پیاده سازی این سیستم به صورت ماژولار نخواهند شد.
با نظر شما کاملا موافقم ؛ پیشتر از اینها چندین بار تصمیم گرفتم تا سیستمی با قابلیت توسعه بالا توسعه داده شود ، ولی یکسری چالش هایی برای خودم داشت که میتونه در مقالات آینده و بعد از اتمام DomainClass‌ها مورد بحث قرار بگیرد. 
‫۸ سال و ۹ ماه قبل، دوشنبه ۷ دی ۱۳۹۴، ساعت ۱۷:۰۸
با تشکر.
به غیر از روش دوم و  حالت آخر در تمام مواردی که فرمودید ، نیاز است ابتدا به عنوان مثال مقاله درج شود و سپس بتوان مشخصات فایل را در جدول مورد نظر ثبت کرد ؛ یک حالت دیگر هم در صورتی که نیاز به Privacy نباشد ، میتوان در نظر گرفت که احتمال میدم در سایت جاری هم به این شکل استفاده میشود ، آن هم داشتن یک جدول فارغ از جداول دیگر  و تنها ارتباطی با جدول کاربران داشته باشد که مدلی به شکل زیر دارد : 
 public class Attachment
    {

        #region Properties
        /// <summary>
        /// sets or gets identifier for attachment
        /// </summary>
        public virtual Guid Id { get; set; }
        /// <summary>
        /// sets or gets name for attachment
        /// </summary>
        public virtual string FileName { get; set; }
        /// <summary>
        /// sets or gets type of attachment
        /// </summary>
        public virtual string ContentType { get; set; }
        /// <summary>
        /// sets or gets size of attachment
        /// </summary>
        public virtual long Size { get; set; }
        /// <summary>
        /// sets or gets Extention of attachment
        /// </summary>
        public virtual string Extensions { get; set; }
        /// <summary>
        /// sets or gets Creation Date
        /// </summary>
        public virtual DateTime CreatedOn { get; set; }
        /// <summary>
        /// gets or sets counts of download this file
        /// </summary>
        public virtual long DownloadsCount { get; set; }

        public virtual DateTime ModifiedOn { get; set; }
        #endregion

        #region NavigationProperties
        /// <summary>
        /// sets or gets identifier of attachment's owner
        /// </summary>
        public virtual long OwnerId { get; set; }
        /// <summary>
        /// sets or gets identifier of attachment's owner
        /// </summary>
        public virtual User Owner { get; set; }
        #endregion
    }
در این حالت یکپارچه کردن ارسال فایل با ویرایشگر متن هم امکان پذیر خواهد بود و همچنین بازهم نیاز نیست فایلها چند باره ارسال شوند و به تفکیک هم میشود فایل‌های کاربران را در اختیارشان گذاشت.
‫۸ سال و ۹ ماه قبل، شنبه ۲۱ آذر ۱۳۹۴، ساعت ۰۲:۱۴
این مورد اضافی است ؛ به صورت توکار  از موردی که مطرح کردید ، پشتیابی میشود.
فقط کافی است هنگام غیرفعال سازی یا حذف نرم کاربر ، SecurityStamp مربوط به کاربر را ویرایش کنید ؛ و اگر زمان این خروج اتوماتیک برای شما خیلی مهم است ، باید validateInterval  رو هم در تنظیمات با مقدار :
TimeSpan.FromMinutes(0)
تنظیم کنید.
‫۸ سال و ۱۱ ماه قبل، پنجشنبه ۱۴ آبان ۱۳۹۴، ساعت ۲۲:۰۳
با تشکر.
کوئری نوشته شده را توسط DNTProfiler بازبنی کردم و به کوئری T-SQL زیر رسیدم:
SELECT [Extent1].[Id] AS [Id],
       [Extent1].[Body] AS [Body],
       [Extent1].[ReplyId] AS [ReplyId],
       [Extent2].[Id] AS [Id1],
       [Extent2].[Body] AS [Body1],
       [Extent2].[ReplyId] AS [ReplyId1]
FROM   [dbo].[BlogComments] AS [Extent1]
       LEFT OUTER JOIN
       [dbo].[BlogComments] AS [Extent2]
       ON [Extent1].[ReplyId] = [Extent2].[Id]
WHERE  ([Extent1].[Id] >= 2)
       AND (([Extent1].[ReplyId] = [Extent1].[ReplyId])
            OR (([Extent1].[ReplyId] IS NULL)
                AND ([Extent1].[ReplyId] IS NULL))
            OR ([Extent2].[Id] IS NULL));
این کوئری فقط زیر شاخه‌های نود مورد نظر را واکشی نمیکند بلکه علاوه بر آن نظراتی که زیر شاخه این نود نیستند رو به همراه زیرشاخه هاش ، واکشی میکند.

‫۹ سال قبل، جمعه ۲۷ شهریور ۱۳۹۴، ساعت ۲۱:۲۰
با تشکر.
در سناریویی برای استفاده از FileStream با EF CodeFirst مجبور شدم از متد Up مربوط به Migration استفاده کنم. با شکل زیر:
  DropColumn("dbo.Judges", "Photo");
  Sql("alter table [dbo].[Judges] add [PhotoTemp] varbinary(max) FILESTREAM not null");
  RenameColumn("dbo.Judges", "PhotoTemp", "Photo");
  Sql("alter table [dbo].[Judges] add constraint [DF_Judges_Photo] default(0x) for [Photo]");
ولی فیلد مورد نظر Photo حذف نمیشود. آیا DropColumn در متد Up  جواب نخواهد داد؟ خیلی دنبال این موضوع گشتم ولی دلیلی برای آن نیافتم.
بروز رسانی:
با حذف کلاس Migration و جنریت کردن دوباره آن و حذف دیتابیس و اجرای دستور update-database ، مشکل حل شد.