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

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

Сообщение Anonymous »

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

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

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, но никогда не запрашивает и не сохраняет в базе данных этот контекст. Я надеюсь, что он не откроет соединение с базой данных и, следовательно, не потребует явного удаления.
Затем я могу запросить DBContext ChangeTracking, чтобы получить изменения, и они передают их в правильное обновление, добавление, удаление недолговечных контекстов БД.
Или еще лучше, просто использовать возможности отслеживания изменений ядра EF без контекста БД?

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

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