Я использую шаблон-посредник (в частности, MediatR ), чтобы получить объект (назовем его и Order
), который я хочу обновить с помощью EFCore. Тем не менее, элемент (Order
) теряет свое отслеживание, поскольку он не обновляется.
Я хочу сделать это так:
public class MyClass
{
private readonly MyDbContext dbContext;
private readonly IMediator mediator;
public MyClass(MyDbContext dbContext, IMediator mediator)
{
this.dbContext = dbContext;
this.mediator = mediator;
}
protected void UpdateField()
{
var order = await mediator.Send(new GetOrderByIdQuery(OrderId));
order.PaymentId = newPaymentId;
dbContext.SaveChanges();
}
}
Выше не будет работать и Мне нужно сделать что-то вроде
protected void UpdateField()
{
var order = dbContext.Orders.SingleOrDefault(o => o.OrderId == OrderId);
order.PaymentId = newPaymentId;
dbContext.SaveChanges();
}
, чтобы оно работало и сохранило новое значение так, как я хочу.
В этом случае GetOrderByIdQuery
не делает ничего фантастического. Он просто извлекает заказ.
public class GetOrderByIdQueryHandler : IRequestHandler<GetOrderByIdQuery, Order>
{
private readonly MyDbContext dbContext;
public GetSubmissionByIdQueryHandler(MyDbContext dbContext)
{
this.dbContext = dbContext;
}
public async Task<Order> Handle(GetOrderByIdQuery request, CancellationToken cancellationToken)
{
return (await dbContext.Orders.FindAsync(request.OrderId));
}
}
А для полноты приведем класс Order
public class Order
{
public Guid OrderId { get; private set; }
public string PaymentId { get; set; }
}