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を使用する場合にのみ機能し、関連するエンティティの不要な更新も生成するため、お勧めしません。