Na parte de " #Antes de salvar um produto, criar categoria se necessário", na funcionalidade 1, me perco sempre onde devo implementar esse if, alguma dica? . Desde já, grato
Na parte de " #Antes de salvar um produto, criar categoria se necessário", na funcionalidade 1, me perco sempre onde devo implementar esse if, alguma dica? . Desde já, grato
Consegui resolver, no entanto, na última parte do projeto onde eu tenho que descomentar a linha do método de importação, surge os seguintes erros :
System.AggregateException: 'One or more errors occurred. (Invalid column name 'Nome'.
Invalid column name 'Nome'.)'
SqlException: Invalid column name 'Nome'.
Invalid column name 'Nome'.
Minha CategoriaRepository ficou:
public interface ICategoriaRepository
{
Task<Categoria> NewCategoria(string nome);
}
public class CategoriaRepository : BaseRepository<Categoria>, ICategoriaRepository
{
public CategoriaRepository(ApplicationContext contexto) : base(contexto)
{
}
public async Task<Categoria> NewCategoria(string nome)
{
var categoriaDB = dbSet.Where(c => c.Nome == nome)
.SingleOrDefault();
if (categoriaDB == null)
{
var novaCategoria = new Categoria()
{
Nome = nome
};
categoriaDB = dbSet.Add(novaCategoria).Entity;
}
await contexto.SaveChangesAsync();
return categoriaDB;
}
}
E ProdutoRepository ficou :
private readonly ICategoriaRepository categoriaRepository;
public ProdutoRepository(ApplicationContext contexto, ICategoriaRepository categoriaRepository) : base(contexto)
{
this.categoriaRepository = categoriaRepository;
}
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.NewCategoria(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 string Subcategoria { get; set; }
public decimal Preco { get; set; }
}
No modelo.cs, adicionei:
public class Categoria : BaseModel
{
public Categoria()
{
}
public string Nome { get; set; }
}
Em ApplicationContext , ficou:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Produto>().HasKey(t => t.Id);
modelBuilder.Entity<Pedido>().HasKey(t => t.Id);
modelBuilder.Entity<Pedido>().HasMany(t => t.Itens).WithOne(t => t.Pedido);
modelBuilder.Entity<Pedido>().HasOne(t => t.Cadastro).WithOne(t => t.Pedido).IsRequired();
modelBuilder.Entity<ItemPedido>().HasKey(t => t.Id);
modelBuilder.Entity<ItemPedido>().HasOne(t => t.Pedido);
modelBuilder.Entity<ItemPedido>().HasOne(t => t.Produto);
modelBuilder.Entity<Cadastro>().HasKey(t => t.Id);
modelBuilder.Entity<Cadastro>().HasOne(t => t.Pedido);
modelBuilder.Entity<Produto>().HasKey(t => t.Id);
modelBuilder.Entity<Produto>().HasOne(t => t.Categoria);
}
Boa tarde, Gabriel Bueno Guimaraes ! Tudo bem?
Você poderia dizer em qual parte do código está ocorrendo esses erros? Qual classe?
Grato, Leonardo
O erro está ocorrendo na classe Startup , quando eu tiro a parte comentada do código. Upei o meu arquivo no DropBox caso você prefira fazer o download.
https://www.dropbox.com/s/sjddf3nz1vc4fwc/AluraNetJunior-master.rar?dl=0
Oi Gabriel, tudo bom?
Pelo seu erro:
SqlException: Invalid column name 'Nome'.
Parece que essa coluna não existe no seu banco. Porém, pela parcela do erro que a gente tem não da pra saber exatamente em que tabela essa coluna não existe.
Dei uma olhada nas migrations que criam seu banco de dados e não reparei em nada que justificasse o problema.
Da uma verificada no seu banco de dados pra ver se todas as tabelas que deveriam ter a coluna Nome (como Produto,Categoria e Cadastro) realmente tem essa coluna.
Uma outra abordagem é remover seu banco de dados e deixar as migrations recriarem ele.
As vezes pode ficar alguma sujeira de dados que impede a execução das migrações =)
Verifica se todas as migrações estão sendo executadas com sucesso no seu banco de dados.
Abraço