Mysql
 sql >> база данни >  >> RDS >> Mysql

ef ядро ​​едно към много отношение изхвърляне изключение Не може да се добави или актуализира дъщерен ред

Не трябва да създавате ShopID nullable, ако се изисква от дизайна.

Проблемът, който срещате, е защото Add метод също така рекурсивно маркира всички екземпляри на обекти, достъпни чрез навигационни свойства и в момента не се проследяват от контекста като Added (т.е. нов).

Може да се реши по много начини:

  • Задаване на запис на обект на Added вместо Add метод:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Задаване на свойството за навигация на null преди извикване на Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Прикачване на обекта на свойството за навигация before извикване на Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Използване на Update вместо Add :

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

Последната техника е обяснена в Запазване на данни - Прекъснати обекти - Комбинация от нови и съществуващи обекти :

Тъй като работи само когато всички обекти използват автоматично генерирани PK и също произвежда ненужни актуализации на свързаните обекти, не го препоръчвам.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql сума, с идентификатори на редове

  2. Mysql не стартира - ibdata1 е повреден? - грешка в операционната система номер 13 - проблем с разрешенията

  3. Python:използвате mysqldb за импортиране на MySQL таблица като речник?

  4. Комбинирайте две колони в SQL за клауза WHERE

  5. как да промените пътя по подразбиране на mysql (в outfile) csv път