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

Erro CS1061 'KeyBuilder' não contém uma definição para 'HasMany' e não foi possível encontrar nenhum método de extensão 'HasMany' acessível que aceite um primeiro argumento do tipo 'KeyBuilder' (há uma diretiva de uso ou referência de assembly ausente?)

Esse é o trecho que está causando esse erro:

modelBuilder.Entity<Pedido>().HasKey(t => t.Id).HasMany(t => t.Itens).WithOne(t => t.Pedido);
4 respostas

Olá Fabiano, como vai?

Pelo erro me parece que você está utilizando em algum lugar do código a classe KeyBuilder. Acredito que possa ser neste trecho do código protected override void OnModelCreating(ModelBuilder modelBuilder).

Se puder compartilhar a classe intera para darmos uma olhada, iremos te auxiliar melhor.

Aguardo retorno.

Abraços

Isso mesmo Ana, segue abaixo a classe completa:

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

namespace CasaDoCodigo
{
    public class ApplicationContext: DbContext
    {
        public ApplicationContext(DbContextOptions options): base(options)
        {

        }

        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>().HasKey(t => t.Id).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);
        }
    }
}
solução!

Oi Fabiano,

Entendi o problema. Usamos o HasKey para definir nossa chave, geralmente um ID. Acredito que ele esteja "sobrando" em seu código, já que definimos ele na primeira linha. Acredito que deixando sem o HasKey, conseguirmos fazer o código funcionar. Veja:

modelBuilder.Entity<Pedido>().HasMany(t => t.Itens).WithOne(t => t.Pedido);

A classe inteira deve estar assim:

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

namespace CasaDoCodigo
{
    public class ApplicationContext : DbContext
    {
        public ApplicationContext(DbContextOptions options) : base(options)
        {
        }

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

Espero ter ajudado.

Abraços

Era isso mesmo, obrigado mais uma vez Ana.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software