Du bør ikke lave ShopID null, hvis det kræves af design.
Problemet du oplever er fordi Add metoden markerer også rekursivt alle entitetsforekomster, der kan nås via navigationsegenskaber og ikke spores i øjeblikket af konteksten som Added (dvs. ny).
Det kan løses på mange måder:
-
Indstilling af enhedsindgang til
Addedi stedet forAddmetode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
Indstilling af navigationsegenskaben til
nullfør kalderAdd:Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Vedhæftning af navigationsegenskabsobjektet før kalder
Add:if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync(); -
Bruger
Updatei stedet forAdd:_context.Products.Update(Product); await _context.SaveChangesAsync();
Den sidste teknik er forklaret i Gemme data - afbrudte enheder - blanding af nye og eksisterende enheder :
Da det kun virker, når alle entiteter bruger autogenererede PK'er, og også producerer unødvendige opdateringer af de relaterede enheder, anbefaler jeg det ikke.