Обновления связей в методах CRUD на ASP .NET с использованием СУБД PostgreSQL

возник вопрос нужно ли целенаправленно обновлять связи в методах CRUD в проекте на ASP .NET с использованием СУБД PostgreSQL?

Приведу пример у меня есть сущность "Цех" и "Оборудование" со связью 1 к М. При создании оборудования мне нужно явно указать цеху обновить список оборудования? Или EF Core или PostgreSQL сами сделает это за меня?

Сущность Workshop:

public int Id { get; set; }
public string Name { get; set; }
public virtual List<Machine>? Machines { get; set; }

Сущность Machine:

public int Id { get; set; }
public int WorkshopId { get; set; }
public string Name { get; set; }
public virtual Workshop Workshop{ get; set; }

Метод в контроллере при создание оборудования:

public async Task Create(Machine machine)
{
  if (ModelState.IsValid)
  {
    await _machineRepository.Create(machine);
    //Нужно ли обновлять связь тут??
    var entityWS = await _workshopRepository.GetById(machine.WorkshopId);
    if (entityWS != null && entityWS.Machines != null)
    {
     entityWS.Machines.Add(machine);
     await _workshopRepository.Update(entityWS);
    }
    var WS = await _workshopRepository.GetById(machine.WorkshopId);
    return RedirectToAction(nameof(Index));
  }
  return View(machine);
}

Ответы (1 шт):

Автор решения: CrazyElf

Если вы в своих репозиториях _machineRepository и _workshopRepository работаете с БД рекомендованным способом - каждый раз создаёте новый DbContext (и он у вас в DI фреймворке не задан синглтоном):

using(DbContext context = new SomeDbContext())
{
    // Do work with context
}

То вы и так должны получить правильный список Machines когда будете запрашивать Workshop. Ведь это не "настоящий" список, в базе он не хранится, он создаётся EF на основании значений Machine.WorkshopId совпадающих с Workshop.Id. А значение WorkshopId вы, я надеюсь, заполняете, когда создаёте экземпляр Machine.

Если же вы храните и используете один DbContext, то лучше откажитесь от этой практики как можно быстрее. Контекст всё сохраняет в кэше, очень быстро разбухает, не видит обновления базы, сделанные другими процессами, вы от этого ничего не выиграете, но получите случаи неправильного обновления данных, с которыми будет очень непросто разобраться.

→ Ссылка