- «ایجاد زیر گریدهای چند سطحی در jqGrid»
- «نمایش Subgrid در jqGrid»
در همان مطلب «ایجاد زیر گریدهای چند سطحی در jqGrid»، دقت کنید که به چه صورتی شماره ردیف master به سرور ارسال شده‌است. این تنها اطلاعاتی است که از master نیاز دارید (شماره ID آن یا rowId در آن مثال).
‫۸ سال قبل، شنبه ۲۷ شهریور ۱۳۹۵، ساعت ۱۷:۳۶
می‌شود متد SaveChanges را بر اساس مفاهیم Tracking سفارشی سازی کرد (مثال «ب» آن). در اینجا مثلا یک متد SaveChangesWithApplyYeKe جدید را درست کنید که این یکسان سازی را اعمال کند (مطابق مثال ب) و برای متد اصلی SaveChanges خیر. به این صورت می‌توانید تصمیم گیری کنید که کجا این موارد اعمال شوند (با فراخوانی SaveChangesWithApplyYeKe سفارشی) یا خیر (با فراخوانی SaveChanges معمولی).
‫۸ سال قبل، شنبه ۲۷ شهریور ۱۳۹۵، ساعت ۱۴:۱۴
راه حل دوم برای اینکه در کلاس Context بیشتر از یک سازنده تعریف نکنیم

اضافه کردن سازنده‌ی دوم به کلاس Context می‌تواند عملیات Migrations را با مشکل مواجه کند. بنابراین جهت ساده سازی آن، به فایل appsettings.json یک مدخل جدید را اضافه می‌کنیم:
{
   "UseInMemoryDatabase": false
}
سپس این مدخل را در متد OnConfiguring کلاس Context مورد استفاده قرار خواهیم داد:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var useInMemoryDatabase = _configuration["UseInMemoryDatabase"].Equals("true", StringComparison.OrdinalIgnoreCase);
    if (useInMemoryDatabase)
    {
        optionsBuilder.UseInMemoryDatabase();
    }
    else
    {
        optionsBuilder.UseSqlServer(
            _configuration["ConnectionStrings:ApplicationDbContextConnection"]
            , serverDbContextOptionsBuilder =>
            {
                var minutes = (int)TimeSpan.FromMinutes(3).TotalSeconds;
                serverDbContextOptionsBuilder.CommandTimeout(minutes);
            });
    }
}
در اینجا بررسی شده‌است که مقدار کلید سفارشی UseInMemoryDatabase در تنظیمات برنامه چیست و بر این اساس تصمیم گیری شده‌است.
در این حالت در سمت کدهای آزمون واحد، مقدار کلید UseInMemoryDatabase را توسط یک InMemoryCollection تامین می‌کنیم و همچنین افزودن AddDbContext نیز معمولی خواهد بود:
var services = new ServiceCollection();
 
services.AddSingleton<IConfigurationRoot>(provider =>
{
    return new Microsoft.Extensions.Configuration.ConfigurationBuilder()
                    .AddInMemoryCollection(new[]
                    {
                        new KeyValuePair<string,string>("UseInMemoryDatabase", "true"),
                    })
                    .Build();
});
 
services.AddEntityFrameworkInMemoryDatabase().AddDbContext<SampleContext>(ServiceLifetime.Scoped);
‫۸ سال قبل، پنجشنبه ۲۵ شهریور ۱۳۹۵، ساعت ۱۷:۴۷
یک نکته‌ی تکمیلی در مورد نصب نگارش‌های جدید NET Core.

پس از نصب به روز رسانی‌های NET Core.، دستور ذیل را در خط فرمان اجرا کنید:
> dotnet --version
1.0.0-preview2-003131
حاصل آن، عبارتی است که در فایل global.json درج خواهد شد. پس از این تغییر:
{
  "projects": [ "src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003131"
  }
}
نیاز است یکبار Solution را بسته و مجددا باز کنید. پس از آن به صورت خودکار، بازیابی بسته‌های مرتبط شروع می‌شوند.
به علاوه تنها در این حالت است که اگر به برگه‌ی Updates نیوگت مراجعه کنید، به روز رسانی‌های جدید را مشاهده خواهید کرد:



بنابراین تازمانیکه فایل global.json را با شماره‌ی SDK جدید به روز رسانی نکنید، نیوگت، بسته‌های به روز شده‌ی مرتبط را دریافت نخواهد کرد.

به علاوه اگر Solution شما دارای چندین پروژه است، بهتر است دستور ذیل را در کنسول پاورشل نیوگت وارد کنید تا تمام آن‌ها را به یکباره به روز رسانی کند:
PM> update-package
پس از آن اگر خطای ذیل را دریافت کردید:
Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'
در فایل‌های project.json، سطر ناقص ذیل را یافته:
"Microsoft.NETCore.App": "vX",
و آن‌را به مدخل کامل ذیل تبدیل کنید:
"Microsoft.NETCore.App": {
      "version": "vX",
      "type": "platform"
    },
‫۸ سال قبل، پنجشنبه ۲۵ شهریور ۱۳۹۵، ساعت ۱۵:۳۳
- در جدول مرتبط باید فیلدهای «وضعیت پاسخ بانک» و «تاریخ و زمان ارسال به درگاه» وجود داشته باشند.
- سپس یک جاب تعریف کنید که هر 10 دقیقه یکبار اجرا شود. در هر بار اجرای آن، در طی یک کوئری لیست مواردی را که «به درگاه پرداخت فرستاده شده»اند و «وضعیت پاسخ بانک» آن‌ها مشخص نیست را واکشی کنید. در اینجا تنها کافی است زمان ارسال واکشی شده را با تاریخ و زمان فعلی مقایسه کنید و عکس العمل لازم (مانند بررسی وضعیت پرداخت) را انجام دهید.
‫۸ سال قبل، چهارشنبه ۲۴ شهریور ۱۳۹۵، ساعت ۱۶:۵۹
اگر نام کنترل‌های ارسال فایل سمت کلاینت یکسان نباشند، هر کدام را باید به عنوان یک پارامتر جدید اکشن متد تعریف کرد و یا می‌توان از طریق آرایه‌ی Request.Files، بدون ذکر پارامتری در اکشن متد، به تمام آن‌ها دسترسی پیدا کرد:
foreach (string file in Request.Files)
{
   var hpf = Request.Files[file] as HttpPostedFileBase;
  // todo: save it
}