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
Added
alih-alihAdd
metode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Menyetel properti navigasi ke
null
sebelum 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
Update
alih-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.