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
stattAdd
Methode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Festlegen der Navigationseigenschaft auf
null
vorher Aufruf vonAdd
: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
stattAdd
:_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.