Neměli byste vytvářet ShopID s možností zrušení hodnoty null, pokud to vyžaduje návrh.
Problém, se kterým se setkáváte, je způsoben tím, že Add metoda také rekurzivně označí všechny instance entity dosažitelné prostřednictvím vlastností navigace a aktuálně nesledované kontextem jako Added (tj. nové).
Dá se to vyřešit mnoha způsoby:
-
Nastavení položky entity na
AddedmístoAddmetoda:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
Nastavení vlastnosti navigace na
nullpřed voláníAdd:Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Připojení objektu vlastnosti navigace před volání
Add:if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Pomocí
UpdatemístoAdd:_context.Products.Update(Product); await _context.SaveChangesAsync();
Poslední technika je vysvětlena v Ukládání dat – Odpojené entity – Mix nových a stávajících entit :
Protože to funguje pouze v případě, že všechny entity používají automaticky generované PK, a také vytváří zbytečné aktualizace souvisejících entit, nedoporučuji to.