No meu projeto esta dando erro na classe "LojaContext.cs" na palavra "OnConfiguring" do protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder).
No meu projeto esta dando erro na classe "LojaContext.cs" na palavra "OnConfiguring" do protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder).
Valter, boa tarde. Me dê mais detalhes desse erro, por favor. É um erro de compilação ou execução? Copia aqui a mensagem de erro.
Essa é a mensagem de erro:
Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro CS1674 "LojaContext": tipo usado em uma instrução using deve ser implicitamente conversível para "System. IDisposable" Alura.Loja.Testes.ConsoleApp D:\Alura\C#\Entity Framework\Alura.Loja\Alura.Loja.Testes.ConsoleApp\Program.cs 26 Ativo
Obrigado, Valter.
Tem a ver com o uso da instância do LojaContext
na estrutura using
do método Main()
. Para um objeto ser colocado dentro de um using
, ele precisa implementar a interface IDisposable
, que no caso do contexto é feito herdando de DbContext
.
Manda seu código para a classe Program
e para a classe LojaContext
, por favor.
Classe Program
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;
namespace Alura.Loja.Testes.ConsoleApp { class Program { static void Main(string[] args) { //GravarUsandoAdoNet(); GravarUsandoEntity(); }
private static void GravarUsandoEntity() { Produto p = new Produto(); p.Nome = "Harry Potter e a Ordem da Fênix"; p.Categoria = "Livros"; p.Preco = 19.89;
using (var contexto = new LojaContext()) { contexto.Produtos.Add(p); contexto.SaveChanges(); } }
private static void GravarUsandoAdoNet() { Produto p = new Produto(); p.Nome = "Harry Potter e a Ordem da Fênix"; p.Categoria = "Livros"; p.Preco = 19.89;
using (var repo = new ProdutoDAO()) { repo.Adicionar(p); } } } }
Classe LojaContext
using Microsoft.EntityFrameworkCore; using System;
namespace Alura.Loja.Testes.ConsoleApp { internal class LojaContext : DBContext { public DbSet Produtos { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\mssqllocaldb;Database=LojaDB;Trusted_Connection=true;"); }
} }
Valter, a classe LojaContext compilou? Porque está herdando de DBContext, com B maiúsculo. E a classe do EF Core para o contexto é DbContext
, com B minúsculo.
Verifique se você acabou criando uma nova classe DBContext
(com B maiúsculo) em sua aplicação. Se esse é o caso, remova-a e modifique a declaração de LojaContext para herdar de DbContext
.
Daniel, era isso mesmo, removi a classe DBContext, alterei o nome e funcionou. Obrigado.