1
resposta

Duplicate entry '2' for key

Minha Duvida seria estou fazendo um projeto onde criei class de despesa e essa despesa tem as categoria, onde ja registrei as categorias, com chave estrangeira nas despesas teria como eu usar a mesma chave estrangeira em outros despesa cadastradas por exemplo:

{ "Descricao": "Sorvete l", "Valor": 4, "Data": "2024-02-19T07:00:00", "CategoriaId": 2 ex: (Alimentacao) }{ "Descricao": "lanche ", "Valor": 45, "Data": "2024-02-19T07:00:00", "CategoriaId": 2 ex: (Alimentacao) }

1 resposta

Olá, Higor.

Tudo bem?

Sim, é possível usar a mesma chave estrangeira em diferentes registros de despesa. Na verdade, isso é uma prática comum quando você tem uma categoria que pode ser associada a várias despesas.

No seu exemplo, você tem duas despesas que pertencem à mesma categoria (Alimentação, com CategoriaId 2):

{
    "Descricao": "Sorvete",
    "Valor":  4,
    "Data": "2024-02-19T07:00:00",
    "CategoriaId": 2
}
{
    "Descricao": "Lanche",
    "Valor":  45,
    "Data": "2024-02-19T07:00:00",
    "CategoriaId": 2
}

Isso deve funcionar sem problemas, desde que a chave estrangeira (CategoriaId) esteja corretamente configurada no banco de dados e que a categoria com CategoriaId 2 exista.

O erro "Duplicate entry '2' for key" que você está recebendo pode estar relacionado a uma configuração incorreta da chave primária ou de índices únicos no banco de dados. Certifique-se de que a coluna CategoriaId não está configurada como uma chave primária ou com uma restrição de unicidade.

Aqui está um exemplo de como poderia ser a configuração da entidade Despesa e Categoria no Entity Framework:

public class Despesa
{
    public int Id { get; set; }
    public string Descricao { get; set; }
    public decimal Valor { get; set; }
    public DateTime Data { get; set; }
    public int CategoriaId { get; set; }
    public Categoria Categoria { get; set; }
}

public class Categoria
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public ICollection<Despesa> Despesas { get; set; }
}

E no DbContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Despesa>()
        .HasOne(d => d.Categoria)
        .WithMany(c => c.Despesas)
        .HasForeignKey(d => d.CategoriaId);
}

Essa configuração permite que múltiplas despesas sejam associadas a uma única categoria.

Veja se faz sentido. Qualquer dúvida manda aqui de novo.

Espero ter ajudado e bons estudos!