问题出现了:是否有必要使用 PostgreSQL DBMS 有目的地更新 ASP .NET 项目中 CRUD 方法中的连接?
举个例子:我有一个实体“工坊”和“装备”,其连接为1到M。在创建装备时,我是否需要明确告诉商店更新装备列表?或者 EF Core 或 PostgreSQL 会为我做这件事吗?
工作坊精髓:
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Machine>? Machines { get; set; }
实体机:
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);
}
如果您在存储库中
_machineRepository并_workshopRepository以推荐的方式使用数据库,则每次都会创建一个新数据库DbContext(并且在框架中未将其指定为单例DI):Machines那么当您请求时,您应该已经收到了正确的列表Workshop。毕竟,这不是一个“真正的”列表,它不存储在数据库中,它是EF根据Machine.WorkshopId匹配的值创建的Workshop.Id。希望WorkshopId您在创建实例时填写该值Machine。如果您存储并使用一个
DbContext,那么最好尽快放弃这种做法。上下文将所有内容存储在缓存中,膨胀非常快,看不到其他进程进行的数据库更新,您不会从中获得任何好处,但您会遇到数据更新不正确的情况,这将非常难以处理。