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 paraAddedem vez deAddmétodo:
_context.Entry(Product).State = EntityState.Added; await _context.SaveChangesAsync(); -
Configurando a propriedade de navegação paranullantes 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(); -
UsandoUpdateem 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.