Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro em algumas classes

No meu projeto esta dando erro na classe "LojaContext.cs" na palavra "OnConfiguring" do protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder).

6 respostas

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;"); }

} }

solução!

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.