Mysql
 sql >> Baza danych >  >> RDS >> Mysql

ef core relacja jeden do wielu zgłasza wyjątek Nie można dodać ani zaktualizować wiersza podrzędnego

Nie powinieneś tworzyć ShopID nullable, jeśli jest to wymagane przez projekt.

Problem, którego doświadczasz, jest spowodowany tym, że Add metoda również rekursywnie oznacza wszystkie instancje jednostki osiągalne przez właściwości nawigacji i nie są obecnie śledzone przez kontekst jako Added (tj. nowy).

Można to rozwiązać na wiele sposobów:

  • Ustawianie wpisu encji na Added zamiast Add metoda:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Ustawienie właściwości nawigacji na null przed dzwoniąc Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Dołączanie obiektu właściwości nawigacji przed dzwoniąc Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Korzystanie z Update zamiast Add :

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

Ostatnia technika jest wyjaśniona w Zapisywanie danych – Odłączone encje – Mieszanka nowych i istniejących encji :

Ponieważ działa tylko wtedy, gdy wszystkie jednostki używają automatycznie generowanych PK, a także wytwarza niepotrzebne aktualizacje powiązanych jednostek, nie polecam tego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Niektóre klawisze nie działają poprawnie w MySQL Workbench for Mac

  2. Możliwe błędy PDOException (MySQL 5)?

  3. Kiedy dodaję xx do mysql float column, jest to zły wynik, czy to błąd?

  4. Uzyskaj wyniki SELECT uporządkowane według identyfikatora wiersza w mySQL

  5. php jak przechowywać i czytać dane json przez mysql?