diff --git a/src/MusicStore/Components/CartSummaryComponent.cs b/src/MusicStore/Components/CartSummaryComponent.cs index 61e5306adb..d7c0454684 100644 --- a/src/MusicStore/Components/CartSummaryComponent.cs +++ b/src/MusicStore/Components/CartSummaryComponent.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; @@ -17,21 +18,14 @@ namespace MusicStore.Components public async Task InvokeAsync() { - var cartItems = await GetCartItems(); + var cart = ShoppingCart.GetCart(DbContext, HttpContext); + + var cartItems = await cart.GetCartAlbumTitles(); - ViewBag.CartCount = cartItems.Count(); - ViewBag.CartSummary = string.Join("\n", cartItems.Distinct()); + ViewBag.CartCount = cartItems.Count; + ViewBag.CartSummary = string.Join("\n", cartItems); return View(); } - - private async Task> GetCartItems() - { - var cart = ShoppingCart.GetCart(DbContext, HttpContext); - - return (await cart.GetCartItems()) - .Select(a => a.Album.Title) - .OrderBy(x => x); - } } } \ No newline at end of file diff --git a/src/MusicStore/Components/GenreMenuComponent.cs b/src/MusicStore/Components/GenreMenuComponent.cs index 883144be30..1b86493ae8 100644 --- a/src/MusicStore/Components/GenreMenuComponent.cs +++ b/src/MusicStore/Components/GenreMenuComponent.cs @@ -24,9 +24,9 @@ namespace MusicStore.Components return View(genres); } - private async Task> GetGenres() + private Task> GetGenres() { - return await DbContext.Genres + return DbContext.Genres .Include(g => g.Albums).ThenInclude(a => a.OrderDetails) // TODO use nested sum https://github.com/aspnet/EntityFramework/issues/3792 //.OrderByDescending( diff --git a/src/MusicStore/Controllers/HomeController.cs b/src/MusicStore/Controllers/HomeController.cs index 042e6d0720..5f0499ceda 100644 --- a/src/MusicStore/Controllers/HomeController.cs +++ b/src/MusicStore/Controllers/HomeController.cs @@ -55,12 +55,12 @@ namespace MusicStore.Controllers return View("~/Views/Shared/AccessDenied.cshtml"); } - private async Task> GetTopSellingAlbumsAsync(MusicStoreContext dbContext, int count) + private Task> GetTopSellingAlbumsAsync(MusicStoreContext dbContext, int count) { // Group the order details by album and return // the albums with the highest count - return await dbContext.Albums + return dbContext.Albums .OrderByDescending(a => a.OrderDetails.Count) .Take(count) .ToListAsync(); diff --git a/src/MusicStore/Models/MusicStoreContext.cs b/src/MusicStore/Models/MusicStoreContext.cs index 1e9fabe9bd..daa56fd6b7 100644 --- a/src/MusicStore/Models/MusicStoreContext.cs +++ b/src/MusicStore/Models/MusicStoreContext.cs @@ -10,6 +10,7 @@ namespace MusicStore.Models public MusicStoreContext(DbContextOptions options) : base(options) { + ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; } public DbSet Albums { get; set; } diff --git a/src/MusicStore/Models/ShoppingCart.cs b/src/MusicStore/Models/ShoppingCart.cs index 80a09430bd..726d466d73 100644 --- a/src/MusicStore/Models/ShoppingCart.cs +++ b/src/MusicStore/Models/ShoppingCart.cs @@ -88,10 +88,22 @@ namespace MusicStore.Models public Task> GetCartItems() { - return _dbContext.CartItems. - Where(cart => cart.CartId == _shoppingCartId). - Include(c => c.Album). - ToListAsync(); + return _dbContext + .CartItems + .Where(cart => cart.CartId == _shoppingCartId) + .Include(c => c.Album) + .ToListAsync(); + } + + public Task> GetCartAlbumTitles() + { + return _dbContext + .CartItems + .Where(cart => cart.CartId == _shoppingCartId) + .Select(c => c.Album.Title) + .Distinct() + .OrderBy(n => n) + .ToListAsync(); } public Task GetCount() @@ -110,7 +122,8 @@ namespace MusicStore.Models // the current price for each of those albums in the cart // sum all album price totals to get the cart total - return _dbContext.CartItems + return _dbContext + .CartItems .Include(c => c.Album) .Where(c => c.CartId == _shoppingCartId) .Select(c => c.Album.Price * c.Count) diff --git a/src/MusicStore/Startup.cs b/src/MusicStore/Startup.cs index 14abc7ec7e..489461bc05 100644 --- a/src/MusicStore/Startup.cs +++ b/src/MusicStore/Startup.cs @@ -43,12 +43,12 @@ namespace MusicStore if (useInMemoryStore) { services.AddDbContext(options => - options.UseInMemoryDatabase()); + options.UseInMemoryDatabase()); } else { services.AddDbContext(options => - options.UseSqlServer(Configuration[StoreConfig.ConnectionStringKey.Replace("__", ":")])); + options.UseSqlServer(Configuration[StoreConfig.ConnectionStringKey.Replace("__", ":")])); } // Add Identity services to the services container