Du bör inte göra ShopID
nullbar om det krävs av design.
Problemet du upplever beror på att Add
Metoden markerar också rekursivt alla entitetsinstanser som kan nås via navigeringsegenskaper och som för närvarande inte spåras av sammanhanget som Added
(dvs. ny).
Det kan lösas på många sätt:
-
Ställer in enhetspost till
Added
istället förAdd
metod:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Ställer in navigeringsegenskapen till
null
före ringerAdd
:Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync();
-
Bifogar navigeringsegenskapsobjektet före ringer
Add
:if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync();
-
Använder
Update
istället förAdd
:_context.Products.Update(Product); await _context.SaveChangesAsync();
Den sista tekniken förklaras i Spara data - frånkopplade enheter - blandning av nya och befintliga enheter :
Eftersom det bara fungerar när alla enheter använder automatiskt genererade PK:er, och även producerar onödiga uppdateringar av de relaterade enheterna, rekommenderar jag det inte.