سلام
ببخشید که دیر شد، به احتمال زیاد پنجشنبه ادامه آموزش را روی سایت قرار خواهم داد...
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<mailSettings>
<smtp>
<network port="25" host="127.0.0.1"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
var items = context.Bookings .Where(booking => booking.StartTime.Year == 2012) .Select(booking => new { booking.StartTime.Year, booking.StartTime.Month, DaysInMonth = EF.Functions.DateDiffDay( booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day), booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day).AddMonths(1) ) }) .Distinct() .OrderBy(r => r.Year) .ThenBy(r => r.Month) .ToList();
var items = context.Bookings .Select(x => new { x.StartTime, EndTime = x.StartTime.AddMinutes(x.Slots * 30) }) .OrderByDescending(x => x.EndTime) .ThenByDescending(x => x.StartTime) .Take(10) .ToList();
var items = context.Bookings .GroupBy(x => new { x.StartTime.Year, x.StartTime.Month }) .Select(x => new { x.Key.Year, x.Key.Month, Count = x.Count() }) .OrderBy(x => x.Year) .ThenBy(x => x.Month) .ToList();
Round(100 * Sum(Slots) / (decimal)(25 * DaysInMonth), 1)
var items = context.Bookings .Select(booking => new { booking.Facility.Name, booking.StartTime.Year, booking.StartTime.Month, booking.Slots, DaysInMonth = EF.Functions.DateDiffDay( booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day), booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day).AddMonths(1) ) }) .GroupBy(b => new { b.Name, b.Year, b.Month, b.DaysInMonth }) .Select(g => new { g.Key.Name, g.Key.Year, g.Key.Month, Utilization = SqlDbFunctionsExtensions.SqlRound( 100 * g.Sum(b => b.Slots) / (decimal)(25 * g.Key.DaysInMonth), 1) }) .OrderBy(r => r.Name) .ThenBy(r => r.Year) .ThenBy(r => r.Month) .ToList();
namespace EFCorePgExercises.Utils { public static class SqlDbFunctionsExtensions { public static decimal SqlRound(decimal value, int precision) => throw new InvalidOperationException($"{nameof(SqlRound)} method cannot be called from the client side."); private static readonly MethodInfo _sqlRoundMethodInfo = typeof(SqlDbFunctionsExtensions) .GetRuntimeMethod( nameof(SqlDbFunctionsExtensions.SqlRound), new[] { typeof(decimal), typeof(int) } ); public static void AddCustomSqlFunctions(this ModelBuilder modelBuilder) { modelBuilder.HasDbFunction(_sqlRoundMethodInfo) .HasTranslation(args => { return SqlFunctionExpression.Create("ROUND", args, _sqlRoundMethodInfo.ReturnType, typeMapping: null); }); } } }
namespace EFCorePgExercises.DataLayer { public class ApplicationDbContext : DbContext { // ... protected override void OnModelCreating(ModelBuilder modelBuilder) { // ... modelBuilder.AddCustomSqlFunctions(); // ... } } }
موفق باشید.
[ResponseCache(Duration = 60)] public IActionResult Contact() { ViewData["Message"] = "Your contact page."; return View(); }
Cache-Control: public,max-age=60
[ResponseCache(Duration = 60, Location = ResponseCacheLocation.Client)]
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(); }
Cache-Control: no-store,no-cache Pragma: no-cache
public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.CacheProfiles.Add("PrivateCache", new CacheProfile { Duration = 60, Location = ResponseCacheLocation.Client }); });
[ResponseCache(CacheProfileName = "PrivateCache")]
{ "dependencies": { //same as before "Microsoft.Extensions.Caching.Memory": "1.0.0" },
public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache();
[Route("DNT/[controller]")] public class AboutController : Controller { private readonly IMemoryCache _memoryCache; public AboutController(IMemoryCache memoryCache) { _memoryCache = memoryCache; } [Route("")] public ActionResult Hello() { string cacheKey = "my-cache-key"; string greeting; if (!_memoryCache.TryGetValue(cacheKey, out greeting)) { greeting = "Hello"; // store in the cache _memoryCache.Set(cacheKey, greeting, new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes(1))); } return Content($"{greeting} from DNT!"); }
new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromMinutes(5))
new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromMinutes(5)) .SetAbsoluteExpiration(TimeSpan.FromHours(1))
new MemoryCacheEntryOptions() .SetPriority(CacheItemPriority.NeverRemove))
<cache expires-after="@TimeSpan.FromMinutes(10)"> @Html.Partial("_WhatsNew") *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-after="@TimeSpan.FromSeconds(5)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-on="@DateTime.Today.AddDays(1).AddTicks(-1)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-sliding="@TimeSpan.FromMinutes(5)"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-user="true"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-route="id"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-query="search"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-cookie="MyAppCookie"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-header="User-Agent"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by="@ViewBag.ProductId"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache vary-by-user="true" vary-by-route="id"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>
<cache expires-sliding="@TimeSpan.FromMinutes(10)" priority="@Microsoft.Extensions.Caching.Memory.CacheItemPriority.NeverRemove"> <!--View Component or something that gets data from the database--> *last updated @DateTime.Now.ToLongTimeString() </cache>