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
Added
thay vìAdd
phương pháp:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Đặt thuộc tính điều hướng thành
null
trướ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
Update
thay 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ó.