Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Entity framework N : N

Não estou conseguindo dar Update-Database, e pelo que estudei parece estar tudo correto, mas quando tento executar o comando este erro aparece "Foreign key 'FK_Venda_Produto_Produtos_ProdutoID' references invalid column 'ProdutoID' in referenced table 'Produtos'."

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estatiticum.Dados
{
    public class Produto
    {
        public int ID { get; set; }
        public double Valor { get; set; }
        public string NomeProduto { get; set; }
        public int CodProduto { get; set; }
        public int Quantidade { get; set; }

        public IList<VendaProduto> VendidoProduto { get; set; }

        public Produto()
        {
            VendidoProduto = new List<VendaProduto>();
        }
        public override string ToString()
        {
            return $"Produto {NomeProduto} Cod do produto {CodProduto} Quantidade{Quantidade} Valor{Valor}";
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estatiticum.Dados
{
    public class Venda
    {
        public int ID { get; set; }
        public string NomeComprador { get; set; }
        public string Bairro { get; set; }
        public string Residencia { get; set; }
        public double ValorCompra { get; set; }
        public int QuantidadeProdutos { get; set; }
        public string NomeProd { get; set; }

        public IList<VendaProduto> ProdutosVendidos { get; set; }

        public Venda()
        {
            ProdutosVendidos = new List<VendaProduto>();
        }

        public override string ToString()
        {
            return $"Comprador {NomeComprador} Comprou {QuantidadeProdutos} produto(s) {NomeProd} no valor de {ValorCompra}";
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Estatiticum.Dados
{
    public class VendaProduto
    {
        public Produto produto { get; set; }
        public Venda venda { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Estatiticum.Dados;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Estatiticum.Configurations
{
    public class ProdutoConfiguration : IEntityTypeConfiguration<Produto>
    {
        public void Configure(EntityTypeBuilder<Produto> builder)
        {
            builder
                .ToTable("Produtos");

            builder
                .Property(P => P.ID)
                .HasColumnName("ProdutoID")
                .IsRequired();

            builder
                .Property(p => p.Valor)
                .HasColumnName("Valor_produto")
                .IsRequired();

            builder
                .Property(p => p.CodProduto)
                .HasColumnName("Codigo_do_produto")
                .IsRequired();

            builder
                .Property(p => p.NomeProduto)
                .HasColumnName("Nome_do_produto")
                .HasColumnType("varchar(100)")
                .IsRequired();

            builder
                .HasAlternateKey(p => p.CodProduto);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Estatiticum.Dados;
using Microsoft.EntityFrameworkCore;

namespace Estatiticum.Configurations
{
    public class VendaProdutoConfiguration : IEntityTypeConfiguration<VendaProduto>
    {
        public void Configure(Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder<VendaProduto> builder)
        {
            builder
                .ToTable("Venda_Produto");

            builder
                .Property<int>("VendaID")
                .IsRequired();

            builder
                .Property<int>("ProdutoID")
                .IsRequired();

            builder
                .Property<DateTime>("data_venda")
                .HasDefaultValueSql("getdate()")
                .HasColumnType("datetime")
                .IsRequired();

            builder
                .HasKey("VendaID", "ProdutoID");

            builder
                .HasOne(vp => vp.produto)
                .WithMany(p => p.VendidoProduto)
                .HasForeignKey("ProdutoID");

            builder
                .HasOne(vp => vp.venda)
                .WithMany(v => v.ProdutosVendidos)
                .HasForeignKey("VendaID");

        }
    }
}
1 resposta
solução!

Olá, Caio, tudo bem?

Adicione uma nova propriedade ProdutoID à classe VendaProduto:

    public class VendaProduto
    {
        public int ProdutoID { get; set; }
        public Produto produto { get; set; }
        public Venda venda { get; set; }
    }

Acredito que isso vai resolver o problema.