‫۶ سال و ۱۰ ماه قبل، پنجشنبه ۱۸ آبان ۱۳۹۶، ساعت ۱۴:۲۷
یک نکته‌ی تکمیلی: چگونه پرسش‌های مطرح شده‌ی در GitHub را بر اساس قالب خاصی درخواست کنیم؟

تصور اینکه تمام پرسش کنندگان در حین طرح سؤالی، نکات مطلب جاری را رعایت کنند، بیهوده است. به همین جهت می‌توان با ارائه‌ی قالب‌هایی از پیش تعیین شده، آن‌ها را مقید به پر کردن جاهای خالی کنیم. برای این منظور در GitHub
- در صفحه‌ی اول پروژه، بر روی دکمه‌ی ایجاد یک فایل جدید کلیک کنید:


- سپس نام فایل را دقیقا معادل github/issue_template.md. وارد کنید (این نام ویژه توسط GitHub شناسایی می‌شود).
- در ادامه محتوای آن‌را به چیزی مانند متن ذیل تنظیم تنظیم کنید:
# Summary of the issue



## Environment

```
The in-use version:
Operating system: 
IDE: (e.g. Visual Studio 2015)
```

## Example code/Steps to reproduce:

```
paste your core code
```

## Output:

```
Exception message:
Full Stack trace:
```
- در پایان، بر روی دکمه‌ی ذخیره‌ی فایل جدید کلیک کنید.

اکنون با کلیک بر روی دکمه‌ی new issue، این قالب از پیش تعیین شده جهت تکمیل جاهای خالی آن نمایش داده می‌شود و می‌تواند راهنمایی برای پرسش کنندگان باشد.
‫۶ سال و ۱۰ ماه قبل، چهارشنبه ۱۷ آبان ۱۳۹۶، ساعت ۱۶:۵۰
یک نکته‌ی تکمیلی
پیاده سازی مطلب جاری برای ASP.NET Identity 2.x یک چنین تغییراتی را پیدا می‌کند:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
   // ...
    Provider = new CookieAuthenticationProvider
    {
        OnValidateIdentity = context =>
        {
            if(shouldIgnoreRequest(context)) // How to ignore Authentication Validations for static files in ASP.NET Identity
            {
                return Task.FromResult(0);
            }
            return container.GetInstance<IApplicationUserManager>().OnValidateIdentity().Invoke(context);
        }
    },
    // ...
});
با این متد بررسی درخواست‌ها:
private static bool shouldIgnoreRequest(CookieValidateIdentityContext context)
{
    string[] reservedPath =
    {
        "/__browserLink",
        "/img",
        "/fonts",
        "/Scripts",
        "/Content",
        "/Uploads",
        "/Images"
    };
    return reservedPath.Any(path => context.OwinContext.Request.Path.Value.StartsWith(path, StringComparison.OrdinalIgnoreCase)) ||
                       BundleTable.Bundles.Select(bundle => bundle.Path.TrimStart('~')).Any(bundlePath => context.OwinContext.Request.Path.Value.StartsWith(bundlePath,StringComparison.OrdinalIgnoreCase));
}
‫۶ سال و ۱۰ ماه قبل، چهارشنبه ۱۷ آبان ۱۳۹۶، ساعت ۱۳:۰۴
به روز رسانی: روش توصیه شده‌ی مخصوص EF Core 2.0 جهت Log خروجی EF

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;

namespace EFLogging
{
    public class BloggingContextWithFiltering : DbContext
    {
        // It is very important that applications do not create a new ILoggerFactory instance for each context instance. 
        // Doing so will result in a memory leak and poor performance.
        public static readonly LoggerFactory MyLoggerFactory
            = new LoggerFactory(new[]
            {
                new ConsoleLoggerProvider((category, level)
                    => category == DbLoggerCategory.Database.Command.Name
                       && level == LogLevel.Information, true)
            });

        public DbSet<Blog> Blogs { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder
                .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
                .UseSqlServer(
                    @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
    }
}
UseLoggerFactory روش توصیه شده‌ی EF Core 2.0 است و طول عمر وهله‌ی ارسالی به آن باید singleton باشد تا از بروز نشتی حافظه جلوگیری کند.
‫۶ سال و ۱۰ ماه قبل، دوشنبه ۱۵ آبان ۱۳۹۶، ساعت ۱۳:۰۸
شبیه به پیاده سازی EmailValidatorDirective مطلب جاری، از Regex ذیل استفاده کنید:
[RegularExpression(@"^[\u0600-\u06FF,\u0590-\u05FF,0-9\s]*$",
                          ErrorMessage = "لطفا تنها از اعداد و حروف فارسی استفاده نمائید")]
public string FriendlyName { get; set; }
‫۶ سال و ۱۰ ماه قبل، جمعه ۱۲ آبان ۱۳۹۶، ساعت ۱۶:۵۹
- با توجه به مطلب «ارتقاء به ASP.NET Core 2.0 - معرفی بسته‌ی Microsoft.AspNetCore.All» و وجود Runtime store، هیچ تفاوتی از لحاظ حجم Publish نهایی وجود نخواهد داشت. برای آزمایش AspNetCoreAll و AspNetCoreWebAPIOnly این مثال «AspNetCoreWebAPIOnly.zip» را publish کنید. حجم نهایی یکی است.
- قطعا با فعالسازی ویژگی‌های کمتر، مصرف حافظه و همچنین تنظیمات مرتبط با آن‌ها و یا انتخاب آن‌ها کاهش پیدا می‌کند. یک نمونه‌ی آن در مورد MVC 5.x است که به صورت پیش‌فرض دو موتور پردازش View در آن فعال است. اگر مورد aspx را حذف کنید، سرعت انتخاب Viewهای آن افزایش پیدا می‌کند: «بهبود سرعت نمایش صفحات در ASP.NET MVC با حذف View Engines اضافی»
‫۶ سال و ۱۰ ماه قبل، پنجشنبه ۱۱ آبان ۱۳۹۶، ساعت ۱۵:۳۲
در EF 6.2 امکان تعریف ایندکس‌ها توسط Fluent API هم (علاوه بر Attributes) میسر شده‌است:
public class MyContext: DbContext
{
        public DbSet<Person> People { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Person>().Property(p => p.Name).HasMaxLength(100);
            modelBuilder.Entity<Person>().HasIndex(p => p.Name).IsUnique();
        }
}