5
respostas

Dúvida para inserir registro com chave estrangeira

Como Inserir registro com chave estrangeira(Caso a chave estrangeira já exista na base de dados)

var produto=new ProdutoModelo();
            produto.Id = geraCodigo(Produto,Sabor,Marca,PesoL);
            produto.Preco = preco;
            produto.Codigo_Categoria = categoriaDAO.buscaPorId(categoria);
            produto.Codigo_Segmento = segmentoDAO.BuscaPorId(segmento);
contexto.produtoModelos.Add(produto);
contexto.SaveChanges();
5 respostas

Se já existe é só passar o número dela. A chave estrangeira você vai usar quando for montar o select pra sua view, no insert você não se precisa preocupar com isso.

Andre o problema é que o entity tenta inserir de novo a categoria e o segmento como elas já existe isso gera o erro de duplicidade das chaves primárias nas tabelas categoria e segmento.

Passa sua estrutura de tabela pra gente analisar

namespace MVendas.Modelo
{
    public class CategoriaModelo
    {
        public String Id { get; set; }
        public String Desc_Categoria { get; set; }

        internal CategoriaModelo criaCategoria(string Desc_Categoria)
        {
            var categoria = new CategoriaModelo();
            categoria.Id = geraCategoria();
            categoria.Desc_Categoria = Desc_Categoria;
            return categoria;
        }

        private string geraCategoria()
        {
            //adicionar codigo para gerar categoria
            return "CG001";
        }
    }
}

using System;

namespace MVendas.Modelo
{
    public class SegmentoModelo
    {
        public String Id { get; set; }
        public String Desc_Segmento { get; set; }

        public SegmentoModelo criaSegmento(string descricao)
        {
            return new SegmentoModelo() { Id = geraCodigo(), Desc_Segmento = descricao };
            /*A  LINHA A CIMA EQUIVALE AO CODIGO EM COMENTARIO
             * var segmento =new SegmentoModelo();
            segmento.Id = geraCodigo();
            segmento.Desc_Segmento = descricao;
            return segmento;*/
        }

        private string geraCodigo()
        {
            return "SEG001";
        }
    }
}


sing MVendas.DAO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MVendas.Modelo
{
    public class ProdutoModelo
    {

        public String Id { get; set; }
        public float Preco{ get; set; }
        public String Codigo_CategoriaId { get; set; }
        public CategoriaModelo Codigo_Categoria { get; set; }
        public String Codigo_SegmenetoId { get; set; }
        public SegmentoModelo Codigo_Segmento { get; set; }

        private CategoriaDAO categoriaDAO;
        private SegmentoDAO segmentoDAO;

        public ProdutoModelo()
        {
            categoriaDAO = new CategoriaDAO();
            segmentoDAO = new SegmentoDAO();
        }
        public ProdutoModelo criaProduto(String Produto, String Sabor, String Marca, String PesoL, float preco, String categoria,String segmento)
        {
            var produto=new ProdutoModelo();
            produto.Id = geraCodigo(Produto,Sabor,Marca,PesoL);
            produto.Preco = preco;
            produto.Codigo_Categoria = categoriaDAO.buscaPorId(categoria);
            produto.Codigo_Segmento = segmentoDAO.BuscaPorId(segmento);
            return produto;
        }
        private String geraCodigo(String Produto, String Sabor, String Marca, String PesoL)
        {
            return Produto + " - " + Sabor + " - " + Marca + " - " + PesoL;
        }

    }
}

Encaminhei a sua dúvida pro instrutor pode ajudar.