Você não deve fazer
ShopID
anulável se for exigido por design. O problema que você está enfrentando é porque
Add
O método também marca recursivamente todas as instâncias de entidade alcançáveis por meio de propriedades de navegação e não rastreadas atualmente pelo contexto como Added
(ou seja, novo). Pode ser resolvido de várias maneiras:
-
Configurando a entrada de entidade paraAdded
em vez deAdd
método:
_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync();
-
Configurando a propriedade de navegação paranull
antes chamandoAdd
:
Product.Shop = null; _context.Products.Add(Product); await _context.SaveChangesAsync();
-
Anexando o objeto de propriedade de navegação antes chamandoAdd
:
if (Product.Shop != null) _context.Attach(Product.Shop); _context.Products.Add(Product); await _context.SaveChangesAsync();
-
UsandoUpdate
em vez deAdd
:
_context.Products.Update(Product); await _context.SaveChangesAsync();
A última técnica é explicada em Salvando dados - Entidades desconectadas - Mistura de entidades novas e existentes :
Como funciona apenas quando todas as entidades usam PKs gerados automaticamente e também produz atualizações desnecessárias das entidades relacionadas, não recomendo.