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