Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como acontece por debaixo dos panos?

Gostaria de entender como que no código da aula o EF está identificando o que é pra ser PK e o que é para ser FK. Não ficou nenhum pouco explícito como isso ocorre durante a aula.

public class Compra
    {
        public int Id { get; set; }
        public int Quantidade { get; internal set; }
        public int ProdutoId { get; set; }      
        public Produto Produto { get; internal set; }
        public double Preco { get; set; }
    }

E por que o Add-Migration ignorou a propriedade public Produto Produto { get; internal set; } na hora de gerar o time-stamp da migration:

migrationBuilder.CreateTable(
                name: "Compras",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Preco = table.Column<double>(nullable: false),
                    ProdutoId = table.Column<int>(nullable: false),
                    Quantidade = table.Column<int>(nullable: false)
                },
1 resposta
solução!

Fiz uma busca e respondi por conta própria, para quem quiser entender também:

Por padrão o Entity subentende por convenção que um Id deve ser uma Primary Key. Então uma propriedade com esse nome será uma Primary Key. Há uma forma de sobrescrever a convenção do Entity e seria usando o Data Annotations. Segue o site que eu usei como auxílio: https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx.

A Foreign Key também segue uma convenção 'NomeDaEntidade + NomeDaPropriedadePK', quando essa propriedade é criada em uma dos lados da relação, ela se torna Foreign Key, como no código da aula: public int ProdutoId { get; set; } este se tornou uma FK por seguir a convenção. Também há formas de sobreescrever o nome que a FK irá receber na tabela.

E a propriedade que recebe um retorno de uma entidade, é entendida como uma relação entre tabelas public Produto Produto { get; internal set; } esta é a relação de dependência. E a relação de navegação recebe uma classe do tipo collection, exemplo: public ICollection<Compra> Compra { get; set; }