1
resposta

[Dúvida] Chave estrangeira

Por que não precisamos indicar a propriedade Id em Avalizações?

Context:

modelBuilder.Entity<AvaliacaoArtista>()
    .HasKey(c => new { c.ArtistaId, c.PessoaId });
    
    // Não deveria ser assim?
    modelBuilder.Entity<AvaliacaoArtista>()
    .HasKey(c => c.Id = new { c.ArtistaId, c.PessoaId });

Entidade:


using ScreenSound.Modelos;

namespace ScreenSound.Shared.Models.Models;

public class AvaliacaoArtista
{
    public int PessoaId { get; set; }
    public int ArtistaId { get; set; }
    public virtual Artista? Artista { get; set; }
    public int Nota { get; set; }

}
1 resposta

Oi Igor! Como vai?

A razão pela qual você não precisa indicar a propriedade Id na entidade AvaliacaoArtista é porque, nesse caso, a chave primária é composta por duas colunas: ArtistaId e PessoaId. Em sistemas onde a chave primária é composta, não é necessário ter uma propriedade Id separada.

No seu exemplo, ao definir a chave primária com HasKey(c => new { c.ArtistaId, c.PessoaId });, você está dizendo ao Entity Framework que a combinação dessas duas propriedades é única e serve como identificador para cada registro na tabela AvaliacaoArtistas. Isso é útil em cenários onde uma única coluna não é suficiente para identificar exclusivamente uma linha, como no caso de avaliações feitas por pessoas para artistas.

Se você tentasse usar HasKey(c => c.Id = new { c.ArtistaId, c.PessoaId });, isso geraria um erro, pois Id não é uma propriedade da entidade AvaliacaoArtista. Além disso, a sintaxe está incorreta, já que Id não pode ser atribuído dessa forma.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.