In my Blazor Server Application, there is this master-detail data grid. This data grid is populated with IsActive = 1 data OnInitializedAsync method. Here is the Order repository and related query which retrieves active data:
public class OrderRepository : IOrderRepository { private readonly IMSContext _db; public OrderRepository(IMSContext db) { _db = db; } public async Task<IEnumerable<Order?>> GetAllOrders(ClaimsPrincipal user) { if (user.IsInRole("Administrators")) { return await _db.Orders.Include(d => d.OrderDetails.Where(od => od.IsActive == 1)).ThenInclude(v => v.Vendor).ToListAsync(); } return await _db.Orders.Where(u => u.DoneBy == user.Identity.Name).Include(d => d.OrderDetails.Where(od => od.IsActive == 1)).ThenInclude(v => v.Vendor).ToListAsync(); }
And here is the OrderDetail repository which sets the related order detail to IsActive = 0
namespace IMS.Plugins.EFCore { public class OrderDetailRepository : IOrderDetailRepository { private readonly IMSContext _db; public OrderDetailRepository(IMSContext db) { _db = db; } public async Task PassiveOrderDetailAsync(OrderDetail orderDetail) { var detail = await this._db.OrdersDetail.FindAsync(orderDetail.Id); if (detail != null) { detail.IsActive = 0; // 0-Passive await _db.SaveChangesAsync(); } } } }
Here is the method I am updating record IsActive = 0 and get all the records which are IsActive = 1. (GetAllOrders)
async Task PassiveDetail(OrderDetail orderDetail) { ... await PassiveOrderDetailUseCase.ExecuteAsync(orderDetail); // sets record IsActive=0 _orders = await ViewAllOrdersUseCase.ExecuteAsync(user); //GetAllOrders, suppose to retrieve only IsActive = 1, but somehow it returns IsActive=0 the updated record StateHasChanged(); }
Here are my entities:
public class Order { public int Id { get; set; } [Required] public DateTime OrderDateTime { get; set; } [Required] [MaxLength(250)] public int CustomerId { get; set; } public string Status { get; set; } [MaxLength(50)] public string DoneBy { get; set; } public List<OrderDetail> OrderDetails { get; set; } public Customer Customer { get; set; } } public class OrderDetail { public int Id { get; set; } [Required] [MaxLength(100)] public string ProductCode { get; set; } [Required] [MaxLength(250)] public string ProductName { get; set; } [Required] public int Quantity { get; set; } [Required] public double BuyUnitPrice { get; set; } public double CostRatio { get; set; } public double UnitCost { get; set; } public double TotalBuyPrice { get; set; } public double? SellUnitPrice { get; set; } public double? TotalSellPrice { get; set; } [MaxLength(150)] public string? ShippingNumber { get; set; } public string? Status { get; set; } [MaxLength(150)] public string? TrackingNumber { get; set; } [MaxLength(400)] public string? Description { get; set; } public string? Currency { get; set; } public string? CustomerStockCode { get; set; } public string? CustomerOrderNumber { get; set; } public int IsActive { get; set; } public double? TotalUnitCost { get; set; } public int OrderId { get; set; } public int VendorId { get; set; } public Order Order { get; set; } public Vendor Vendor { get; set; } } public class Customer { public int Id { get; set; } [Required] public long TaxNumber { get; set; } [Required] public string TaxAdministration { get; set; } [Required] public string Name { get; set; } [Required] public string Address { get; set; } [Required] public string DeliveryAddress { get; set; } [Required] [RegularExpression(@"^((?!\.)[\w-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$", ErrorMessage = "Invalid email address.")] public string Email { get; set; } [Required] public string PhoneNumber { get; set; } [Required] public string MainResponsibleName { get; set; } public string AssistantResponsibleName { get; set; } } public class Vendor { public int Id { get; set; } [Required] public string Name { get; set; } [Required] public string Address { get; set; } [Required] [RegularExpression(@"^((?!\.)[\w-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$", ErrorMessage = "Invalid email address.")] public string Email { get; set; } [Required] public string PhoneNumber { get; set; } [Required] public string MainResponsibleName { get; set; } public string AssistantResponsibleName { get; set; } public List<OrderDetail> OrderDetails { get; set; } }
Couldn't manage to add Customer to this linq
return await _db.Orders .Include(d => d.OrderDetails.Where(od => od.IsActive == 1)) .ThenInclude(v => v.Vendor) .AsNoTracking() .ToListAsync();
When I add AsNoTracking() the query in my previous post gets only IsActive = 1 that is what I want but somehow doesn't get the Customer which is why I want to include it. Order have 2 children, Customer and OrderDetail. OrderDetail has one, Vendor. Couldn't manage to include Customer tough to the query.
AsNoTracking()
IsActive = 1
Customer
Order
OrderDetail
Vendor