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
Added
in plaats vanAdd
methode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
De navigatie-eigenschap instellen op
null
voorAdd
. 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();
-
Update
gebruiken 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.