sql >> Database >  >> RDS >> Mysql

ef core one to many relatie worp uitzondering Kan een onderliggende rij niet toevoegen of bijwerken

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 van Add methode:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • De navigatie-eigenschap instellen op null voor Add . 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 van Add :

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



  1. Parameter gebruiken met LIKE in Sql Server Compact Edition

  2. Query om de som van de afstand (lengtegraad, breedtegraad) in opeenvolgende rijen in Mysql . te berekenen

  3. PostgreSQL verwijdert alle behalve de oudste records

  4. PHP MySQL Sorteer op meerdere kolommen