Anda tidak boleh membuat ShopID nullable jika diperlukan oleh desain.
Masalah yang Anda alami adalah karena Add metode ini juga secara rekursif menandai semua instance entitas yang dapat dijangkau melalui properti navigasi dan saat ini tidak dilacak oleh konteks sebagai Added (yaitu baru).
Ini dapat diselesaikan dengan banyak cara:
-
Mengatur entri entitas ke
Addedalih-alihAddmetode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
Menyetel properti navigasi ke
nullsebelum memanggilAdd:Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Melampirkan objek properti navigasi sebelum memanggil
Add:if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Menggunakan
Updatealih-alihAdd:_context.Products.Update(Product); await _context.SaveChangesAsync();
Teknik terakhir dijelaskan di Menyimpan Data - Entitas Terputus - Gabungan entitas baru dan yang sudah ada :
Karena ini hanya berfungsi ketika semua entitas menggunakan PK yang dibuat secara otomatis, dan juga menghasilkan pembaruan yang tidak perlu dari entitas terkait, saya tidak merekomendasikannya.