Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ef-Kern-Eins-zu-viele-Beziehungs-Ausnahmeausnahme Kann keine untergeordnete Zeile hinzufügen oder aktualisieren

Sie sollten ShopID nicht erstellen nullable, wenn dies vom Design her erforderlich ist.

Das Problem, das Sie haben, liegt daran, dass Add -Methode markiert auch rekursiv alle Entitätsinstanzen, die über Navigationseigenschaften erreichbar sind und derzeit nicht vom Kontext verfolgt werden, als Added (d. h. neu).

Es kann auf viele Arten gelöst werden:

  • Setzen des Entitätseintrags auf Added statt Add Methode:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Festlegen der Navigationseigenschaft auf null vorher Aufruf von Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • vorher das Navigationseigenschaftsobjekt anhängen Aufruf von Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Mit Update statt Add :

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

Die letzte Technik wird in Speichern von Daten - Getrennte Entitäten - Mischung aus neuen und bestehenden Entitäten :

Da es nur funktioniert, wenn alle Entitäten automatisch generierte PKs verwenden, und außerdem unnötige Aktualisierungen der zugehörigen Entitäten erzeugt, empfehle ich es nicht.