Maak geen ShopID nullable als het ontwerp vereist is.
Het probleem dat u ondervindt, is omdat Add methode markeert ook recursief alle entiteitsinstanties die bereikbaar zijn via navigatie-eigenschappen en momenteel niet worden gevolgd door de context als Added (d.w.z. nieuw).
Het kan op veel manieren worden opgelost:
-
Entiteitsinvoer instellen op
Addedin plaats vanAddmethode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
De navigatie-eigenschap instellen op
nullvoorAdd. aanroepen :Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Het navigatie-eigenschapsobject toevoegen voor
Add. aanroepen :if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Updategebruiken in plaats vanAdd:_context.Products.Update(Product); await _context.SaveChangesAsync();
De laatste techniek wordt uitgelegd in Gegevens opslaan - Niet-verbonden entiteiten - Mix van nieuwe en bestaande entiteiten :
Aangezien het alleen werkt wanneer alle entiteiten automatisch gegenereerde PK's gebruiken en ook onnodige updates van de gerelateerde entiteiten produceert, raad ik het niet aan.