sql >> Database teknologi >  >> RDS >> Mysql

ef kerne en til mange relationskast undtagelse Kan ikke tilføje eller opdatere en underordnet række

Du bør ikke lave ShopID null, hvis det kræves af design.

Problemet du oplever er fordi Add metoden markerer også rekursivt alle entitetsforekomster, der kan nås via navigationsegenskaber og ikke spores i øjeblikket af konteksten som Added (dvs. ny).

Det kan løses på mange måder:

  • Indstilling af enhedsindgang til Added i stedet for Add metode:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Indstilling af navigationsegenskaben til null før kalder Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Vedhæftning af navigationsegenskabsobjektet før kalder Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Bruger Update i stedet for Add :

    _context.Products.Update(Product);
    await _context.SaveChangesAsync();
    

Den sidste teknik er forklaret i Gemme data - afbrudte enheder - blanding af nye og eksisterende enheder :

Da det kun virker, når alle entiteter bruger autogenererede PK'er, og også producerer unødvendige opdateringer af de relaterede enheder, anbefaler jeg det ikke.



  1. Sådan fungerer MID()-funktionen i MySQL

  2. Sådan fungerer SQLite Ltrim()

  3. SLET rekursiv PostgreSQL

  4. Mange-til-mange forhold vælg og bestil efter