Bạn không nên tạo ShopID nullable nếu nó được yêu cầu bởi thiết kế.
Sự cố bạn đang gặp phải là do Add phương thức cũng đánh dấu một cách đệ quy tất cả các cá thể thực thể có thể truy cập được thông qua các thuộc tính điều hướng và hiện không được ngữ cảnh theo dõi là Added (tức là mới).
Nó có thể được giải quyết theo nhiều cách:
-
Đặt mục nhập thực thể thành
Addedthay vìAddphương pháp:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
Đặt thuộc tính điều hướng thành
nulltrước đây gọiAdd:Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Đính kèm đối tượng thuộc tính điều hướng trước gọi
Add:if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Sử dụng
Updatethay vìAdd:_context.Products.Update(Product); await _context.SaveChangesAsync();
Kỹ thuật cuối cùng được giải thích trong Lưu dữ liệu - Thực thể bị ngắt kết nối - Kết hợp các thực thể mới và hiện tại :
Vì nó chỉ hoạt động khi tất cả các thực thể sử dụng PK được tạo tự động và cũng tạo ra các bản cập nhật không cần thiết cho các thực thể có liên quan, tôi không khuyên bạn nên sử dụng nó.