Não entendi a utilização de ": base" para enviar o option através do construtor para a classe base.
Pra mim ficou meio confuso o entendimento, alguém poderia me explicar o que esta ocorrendo nesse ponto de uma forma mais clara.
Obrigado. :)
Não entendi a utilização de ": base" para enviar o option através do construtor para a classe base.
Pra mim ficou meio confuso o entendimento, alguém poderia me explicar o que esta ocorrendo nesse ponto de uma forma mais clara.
Obrigado. :)
Fala, André, tudo bem?
Repare que como está escrito nosso código a configuração de banco de dados está fixa no método OnConfiguring().
//aqui estou informando que vou usar o SQL Server com a conexão específica...
UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=LojaDB;Trusted_Connection=true;");
Se houver uma mudança no banco de dados ou na string de conexão, você tem duas opções: ou alterar diretamente no código do método (opção que já utilizo no curso) ou deixar para quem está consumindo a classe LojaContext
configurar as opções (para isso, o Entity declarou uma classe para representar as opções de configuração do contexto, chamada DbContextOptions
).
Para implementar a segunda opção precisamos receber uma instância da classe DbContextOptions
e usá-la para configurar o banco. Como receber essa instância? Através de um construtor cujo argumento de entrada é justamente um objeto desse tipo.
Mas porquê um construtor vazio? Porque na verdade vamos apenas repassar o objeto options
para o construtor da classe ancestral DbContext
que vai se encarregar de guardar as opções. Esse repasse é feito através da sintaxe : base(options)
.
public LojaContext(DbContextOptions<LojaContext> options): base(options)
{ }
Daí, no método OnConfiguring()
, basta testar se as opções já foram configuradas e, caso contrário, definir como padrão o SQL Server e conexão local como banco de dados.
Tranquilo? Espero que tenha conseguido desatar esse nó. Se não, vamos continuar conversando aqui, ok?
Ótima resposta Daniel, obrigado pela ajuda!