sql >> データベース >  >> RDS >> Mysql

efコア1対多の関係スロー例外子行を追加または更新できません

    ShopIDを作成しないでください 設計上必要な場合はnull許容。

    発生している問題は、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();
      
    • ナビゲーションプロパティオブジェクトをにアタッチする 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. MySQLdは、5.6から5.7へのbrewアップグレード後に起動しません

    2. ノードデータベース呼び出しのネストを解除する

    3. MySqlクエリを使用してデータベース内の数値を小数点以下2桁に丸める方法

    4. データベース/SQLへのファイルパスの保存