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

Ao criar a venda está criando um novo usuário

Boa noite, ao criar uma nova venda, está criando um novo usuário, com um novo ID, e inserindo esse usuário nessa venda, segue o código abaixo:

 using (EntidadesContext context = new EntidadesContext())
            {
                var dao = new UsuarioDao();
                Usuario renan = dao.BuscarPorId(1);
                var v = new Venda() {Cliente=renan  };


                var p1 = context.Produtos.FirstOrDefault(p => p.ID == 1);
                var p2 = context.Produtos.FirstOrDefault(p => p.ID == 2);

                var pv1 = new ProdutoVenda() { Venda = v, Produto = p1 };
                var pv2 = new ProdutoVenda() { Venda = v, Produto = p2 };

                context.Vendas.Add(v);
                context.ProdutoVenda.Add(pv1);
                context.ProdutoVenda.Add(pv2);
                context.SaveChanges();
            }
3 respostas

Olá, WBrito

O problema parece estar no método BuscarPorId. Você pode postá-lo aqui pra analisarmos melhor?

Boa noite Marcelo, antes de mais nada obrigado pela ajuda. Logo abaixo está o código BuscarPorId. Só um aviso, estou utilizando o EF 6, pois como preciso fazer um projeto em EF 6, achei melhor utilizá-lo. Outra coisa que observei que ao alterar o código:

var v = new Venda() {Cliente=renan };

Pois se eu substitui por:

var v = new Venda() { UsuarioID = 1 };

Dá certo.

Código do BuscaPorId

 public Usuario BuscarPorId(int id)
        {
            return context.Usuarios.FirstOrDefault(u => u.ID == id);

        }

ps. Ao debugar o BuscarPorId, verifiquei que está retornando e setando a propriedade Cliente do objeto venda com os dados certo.

Mais uma vez obrigado pelo help.

solução!

Olá WBrito. O Comportamento do Entity está correto. Você tem dois objetos dentro do mesmo contexto de dados. É uma boa prática sempre testar o estado do objetos que vai persistir. Mas para resolver o seu problema basta inserir o Id do Usuário do invés do cliente como um todo. Ficaria da seguinte maneira.

using (EntidadesContext context = new EntidadesContext()) { var dao = new UsuarioDao(); Usuario renan = dao.BuscarPorId(1);

var v = new Venda() {IdCliente=renan.Id };

var p1 = context.Produtos.FirstOrDefault(p => p.ID == 1); var p2 = context.Produtos.FirstOrDefault(p => p.ID == 2);

var pv1 = new ProdutoVenda() { Venda = v, Produto = p1 }; var pv2 = new ProdutoVenda() { Venda = v, Produto = p2 };

context.Vendas.Add(v); context.ProdutoVenda.Add(pv1); context.ProdutoVenda.Add(pv2); context.SaveChanges(); }

OBS: Uma outra solução seria você recuperar o usuário em um outro contexto de Dados. Mas incluir apenas o ID do Cliente vai resolver seu problema.

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