EF Core dbcontext entry how to reload set of entities?

Cenk 1,026 Reputation points
2023-02-03T09:29:33.2433333+00:00

Hi,

How can I reload a set of entities in EF Core?

await _db.Entry(Orders).ReloadAsync();

I update data in 2 ways.

Here is the first one;

public async Task UpdateOrderDetailAsync(OrderDetail orderDetail)
        {
            var detail = await this._db.OrdersDetail.FindAsync(orderDetail.Id);
            if (detail != null)
            {
                detail.Quantity = orderDetail.Quantity;
                detail.CostRatio = orderDetail.CostRatio;
                detail.Description = orderDetail.Description;
                detail.ProductCode = orderDetail.ProductCode;
                detail.ProductName = orderDetail.ProductName;
                detail.BuyUnitPrice = orderDetail.BuyUnitPrice;
                detail.ShippingNumber = orderDetail.ShippingNumber;
                detail.Status = orderDetail.Status;
                detail.TotalBuyPrice = orderDetail.BuyUnitPrice * orderDetail.Quantity;
                detail.TotalSellPrice = orderDetail.Quantity * orderDetail.SellUnitPrice;
                detail.SellUnitPrice = orderDetail.SellUnitPrice;
                detail.UnitCost = (orderDetail.BuyUnitPrice * (orderDetail.CostRatio / 100)) + orderDetail.BuyUnitPrice;
                detail.TotalUnitCost = orderDetail.UnitCost * orderDetail.Quantity;
                detail.Currency = orderDetail.Currency;
                detail.CustomerOrderNumber = orderDetail.CustomerOrderNumber;
                detail.CustomerStockCode = orderDetail.CustomerStockCode;
                detail.OrderId = orderDetail.OrderId;
                detail.VendorId = orderDetail.VendorId;
                detail.TrackingNumber = orderDetail.TrackingNumber;
                detail.Warehouse = orderDetail.Warehouse;
                detail.PaymentStatus = orderDetail.PaymentStatus;
                if (detail.Status == "Completed")
                {
                    detail.CompletionDateTime = DateTime.Now;
                }
                else
                {
                    detail.CompletionDateTime = null;
                }
                await _db.SaveChangesAsync();
            }
        }

Here is the second one, I upload data with excel and update

public async Task UpdateReportAsync(List<OrderDetail> reports)
        {
            _db.UpdateRange(reports);
            await _db.SaveChangesAsync();

        }

The main problem is, If I use the first approach I can retrieve the updated data with this query:

public async Task<IEnumerable<Order?>> GetAllOrders(ClaimsPrincipal user)
        {
            if (user.IsInRole("Administrators"))
            {
                var result = await _db.Orders
                    .Include(d => d.OrderDetails.Where(od => od.IsActive == 1))
                    .ThenInclude(v => v.Vendor)
                    .Include(c => c.Customer)
                    .OrderByDescending(s => s.Id)
                    //.AsNoTracking()
                    .ToListAsync();
                return result;
            }

            return await _db.Orders
                .Where(u => u.DoneBy == user.Identity.Name)
                .Include(d => d.OrderDetails.Where(od => od.IsActive == 1))
                .ThenInclude(v => v.Vendor)
                .Include(c => c.Customer)
                .OrderByDescending(s => s.Id)
                //.AsNoTracking()
                .ToListAsync();
        }

But if I upload excel and use the update range then updated data does not retrieve. How can I fix this? What is the problem?

Thank you.

Entity Framework Core
Entity Framework Core
A lightweight, extensible, open-source, and cross-platform version of the Entity Framework data access technology.
776 questions
0 comments No comments
{count} vote

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.