Acredito que a minha dúvida seja teórica, porém agradeceria a ajuda.
Na atividade 02 do exercício "Relacionamentos Um para Muitos no Entity", ao gerar a classe Migration para a classe Compra, a FK "ProdutoId" é gerada permitindo valores nulos:
[... código suprimido ]
ProdutoId = table.Column<int>(nullable: true),
[... código suprimido ]
Para corrigir essa situação, a Migração é desfeita e então adicionamos na classe Compra não só a referência de Produto, mas também uma propriedade "ProdutoId" com valor INT.
Após essa alteração, realizamos uma nova migração e então nesse ponto o Entity compreende o valor "ProdutoId" como NOT NULL:
[... código suprimido ]
ProdutoId = table.Column<int>(nullable: false),
[... código suprimido ]
A minha dúvida portanto é:
Faz sentido adicionar na classe Compra tanto o Produto quanto a propriedade ProdutoId apenas para termos um valor Not Null?
Não seria muito mais prático alterar a flag booleana da classe Migration para false?
//Classe do Instrutor
namespace Alura.Loja.Testes.ConsoleApp
{
public class Compra
{
public int Id { get; internal set; }
public int Quantidade { get; internal set; }
public int ProdutoId { get; internal set; } // < Torna FK Not Null
public Produto Produto { get; internal set; } // + Ref. de Produto
public double Preco { get; internal set; }
}
}
//Classe sem ProdutoId (Gera FK NULL)
namespace Alura.Loja.Testes.ConsoleApp
{
public class Compra
{
public int Id { get; internal set; }
public int Quantidade { get; internal set; }
public Produto Produto { get; internal set; } // Apenas Ref. de Produto
public double Preco { get; internal set; }
}
}
Com a classe "simplificada", altera-se então a Migration, não permitindo valores nulos:
ProdutoId = table.Column<int>(nullable: false)
Por boas práticas, qual melhor caminho a seguir nesse cenário?