Например.
Код: Выделить всё
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();
}
}
Код: Выделить всё
ctx.Attach(order)Использование ctx.Update(order), а затем сохранение, потенциально приведет к пересохранению всего внутри этого объекта. в заказе могут быть сотни строк элементов, которые будут без необходимости сохраняться в базе данных.
Существует ли известный шаблон, как лучше всего справиться с этим?
Я думал о том, чтобы прикрепить возвращенный объект к новому DbContext, но никогда не запрашивал и не сохранял его в базе данных с этим контекстом. Я надеюсь, что он не откроет соединение с базой данных и, следовательно, не потребует явного удаления.
Затем я могу запросить ChangeTracking этого DbContext, чтобы получить изменения, они передают им изменения в правильное обновление, добавляют, удаляют кратковременные контексты базы данных.
Или еще лучше, просто используя возможности отслеживания изменений EF Core без DbContext?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -dbcontext