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
Added
i stedet forAdd
metode:_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Indstilling af navigationsegenskaben til
null
fø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
Update
i 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.