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

Erro na compilação final, tables corretos. Mas não preenchem pq n compila.

O programa não está rodando, o que posso consertar? Segue a foto do erro na hora da compilação. Acredito que seja com o public CategoriaRepository categoriaRepository mas não sei como resolver! Foto do erro: https://imgur.com/a/EtHXu6L

using CasaDoCodigo.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CasaDoCodigo.Repositories
{
    public class ProdutoRepository : BaseRepository<Produto>, IProdutoRepository
    {
        public CategoriaRepository categoriaRepository;

        public ProdutoRepository(ApplicationContext contexto) : base(contexto)
        {
        }

        public IList<Produto> GetProdutos()
        {
            return dbSet.ToList();
        }

        public async Task SaveProdutos(List<Livro> livros)
        {
            foreach (var livro in livros)
            {
                if (!dbSet.Where(p => p.Codigo == livro.Codigo).Any())
                {
                    Categoria categoria = await categoriaRepository.AdicionarCategoria(livro.Categoria);
                    dbSet.Add(new Produto(livro.Codigo, livro.Nome, livro.Preco, categoria));
                }
            }
            await contexto.SaveChangesAsync();
        }
    }

    public class Livro
    {
        public string Codigo { get; set; }
        public string Nome { get; set; }
        public string Categoria { get; set; }
        public decimal Preco { get; set; }
    }
}
5 respostas

Quando eu comento o

//serviceProvider.GetService<IDataService>().InicializaDB().Wait();

compila. Mas não preenche o banco de dados. Eu acho que o problema é nessa parte de #Referenciar repositório de categoria no repositório de produtos. Como eu faço isso de forma certa? Pra usar o método AdicionarCategoria.

Oi Erick, tudo bem?

Você pode confirmar se registrou a interface IDataService na injeção de dependência? Basta ver se esta linha existe no arquivo Startup.cs:

services.AddTransient<IDataService, DataService>();

Inseri sim.

services.AddTransient<IDataService, DataService>();
            services.AddTransient<IProdutoRepository, ProdutoRepository>();
            services.AddTransient<IPedidoRepository, PedidoRepository>();
            services.AddTransient<ICadastroRepository, CadastroRepository>();
            services.AddTransient<IItemPedidoRepository, ItemPedidoRepository>();
            services.AddTransient<ICategoriaRepository, CategoriaRepository>();
solução!

Resolvido, acrescentei código ao arquivo ProdutoRepository.cs.

Antes:

  public CategoriaRepository categoriaRepository;

        public ProdutoRepository(ApplicationContext contexto) : base(contexto)
        {
        }

Eu deveria ter implementado a interface não o repositório.

Depois:

private readonly ICategoriaRepository categoriaRepository;

        public ProdutoRepository(ApplicationContext contexto, ICategoriaRepository categoriaRepository) : base(contexto)
        {
            this.categoriaRepository = categoriaRepository;
        }

Compilado perfeitamente! Obrigado pela tentativa de me ajudar.

Excelente, Erick! Isso já aconteceu muito comigo. Pra você ver como uma declaração um pouco diferente pode fazer a gente perder horas na frente do computador. Obrigado por participar do fórum!