Отслеживание изменений EF Core без DbContext ⇐ C#

Место общения программистов C#
Anonymous
Отслеживание изменений EF Core без DbContext

Сообщение Anonymous »

Я использую Blazor Server Side и EF Core для проекта. У меня возникла проблема: отслеживание изменений избыточно, поскольку предлагается создавать кратковременные контексты с помощью фабрики БД.
Например.

Код: Выделить всё

public class OrderService
{
private readonly IDbContextFactory _contextFactory;

public OrderService(IDbContextFactory contextFactory)
{
_contextFactory = contextFactory;
}

public Order GetById(int id)
{
using var context = _contextFactory.CreateDbContext();
return context.Orders
.Include(o => o.Lines)
.ThenInclude(o => o.Product)
.Where(o => o.OrderId == id).FirstOrDefault();
}
}
Это означает, что вы не можете просто передать объект из GetById в компонент, позволить пользователю редактировать его через компонент, а затем повторно присоединить (

Код: Выделить всё

ctx.Attach(order)
) и сохраните, так как ничто не будет помечено как измененное.
Использование ctx.Update(order), а затем сохранение, потенциально приведет к пересохранению всего внутри этого объекта. в заказе могут быть сотни строк элементов, которые будут без необходимости сохраняться в базе данных.
Существует ли известный шаблон, как лучше всего справиться с этим?
Я думал о том, чтобы прикрепить возвращенный объект к новому DbContext, но никогда не запрашивал и не сохранял его в базе данных с этим контекстом. Я надеюсь, что он не откроет соединение с базой данных и, следовательно, не потребует явного удаления.
Затем я могу запросить ChangeTracking этого DbContext, чтобы получить изменения, они передают им изменения в правильное обновление, добавляют, удаляют кратковременные контексты базы данных.
Или еще лучше, просто используя возможности отслеживания изменений EF Core без DbContext?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -dbcontext

Вернуться в «C#»