sql >> Databáze >  >> RDS >> Mysql

ef core one to many relationship throw výjimka Nelze přidat nebo aktualizovat podřízený řádek

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 Added místo Add metoda:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Nastavení vlastnosti navigace na null př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í Update místo Add :

    _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.



  1. DROP TABLE IF EXISTS Příklad v PostgreSQL

  2. Použití proměnné v MySQL Vyberte příkaz v klauzuli Where

  3. Kontrola zálohování serveru SQL

  4. nelze zobrazit miniaturu na obrazovce, dostanu čistou bílou obrazovku s trochu rozbitým obrázkem vlevo nahoře