sql >> Base de Datos >  >> RDS >> Mysql

ef core uno a muchos relación lanzar excepción No se puede agregar o actualizar una fila secundaria

No deberías hacer ShopID anulable si es requerido por diseño.

El problema que está experimentando se debe a que Add El método también marca recursivamente todas las instancias de entidad accesibles a través de las propiedades de navegación y que el contexto no rastrea actualmente como Added (es decir, nuevo).

Se puede resolver de muchas maneras:

  • Establecer la entrada de la entidad en Added en lugar de Add método:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Establecer la propiedad de navegación en null antes llamando a Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Adjuntar el objeto de propiedad de navegación antes llamando a Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Usando Update en lugar de Add :

    _context.Products.Update(Product);
    await _context.SaveChangesAsync();
    

La última técnica se explica en Guardar datos - Entidades desconectadas - Combinación de entidades nuevas y existentes :

Dado que solo funciona cuando todas las entidades usan PK generadas automáticamente y también produce actualizaciones innecesarias de las entidades relacionadas, no lo recomiendo.