none
EF 5 x Classe genérica, duplicando registro ao adicionar. RRS feed

  • Pergunta

  • Galera, estou começando agora com c# e me deparei com o seguinte situação: Após executar o código abaixo, na tabela Tpende deveria ter apenas um registro, mas esta ficando com dois.  alguém consegue me indicar o que estou fazendo de errado???

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
        public class Program
        {
            static void Main(string[] args)
            {
                Tpende tpend;

                //Desta forma funciona, mas eu precisava fazer com uma classe generica.

                //using (Contexto bd = new Contexto() )
                //{
                //    tpend = bd.Tpend.First<Tpende>();

                //    var Pessoa = new Pessoa() { Nome = "jose da silva" };

                //    Pessoa.Enderecos.Add(new Endereco() { Bairro = "Centro", logradouro = "Vitoria", tpende = tpend });
                //    Pessoa.Enderecos.Add(new Endereco() { Bairro = "Av princesa isabel", logradouro = "Vitoria", tpende = tpend });
               

                //    bd.Pessoas.Add(Pessoa);

                //    bd.SaveChanges();
                //}                

                var gestor = new Gestor<Pessoa>();
                
                    using (Contexto bd = new Contexto())
                    {
                        bd.Database.ExecuteSqlCommand("DELETE FROM PESSOAS");
                        bd.Database.ExecuteSqlCommand("DELETE FROM TPENDES");
                        bd.Database.ExecuteSqlCommand("INSERT INTO TPENDES(DESCRICAO) VALUES('PRINCIPAL')");
                        bd.SaveChanges();
                        tpend = bd.Tpend.First<Tpende>();
                    }

                    var Pessoa = new Pessoa() { Nome = "jose da silva" };

                    Pessoa.Enderecos.Add(new Endereco() { Bairro = "Centro", logradouro = "Vitoria", tpende = tpend });
                    Pessoa.Enderecos.Add(new Endereco() { Bairro = "Boa vista", logradouro = "Vitoria", tpende = tpend });

                    gestor.salvar(Pessoa);            
            }
        }

        public class Pessoa {
            [Key]
            public int ID { get; set; }
            public String Nome { get; set; }
            public virtual ICollection<Endereco> Enderecos { get; set; }

            public Pessoa()
            {
                Enderecos = new List<Endereco>();
            }


        }

        public class Endereco
        {
            [Key]
            public int ID { get; set; }
            public string logradouro { get; set; }
            public string Bairro { get; set; }
            
            [Required]
            public Pessoa pessoa { get; set; }

            [Required]
            public Tpende tpende { get; set; }

        }

        public class Tpende {
            [Key]
            public int ID { get; set; }
            public string descricao { get; set; }

            [InverseProperty("Tpende")]
            public virtual ICollection<Endereco> Enderecos { get; set; }
            public Tpende()
            {
                Enderecos = new List<Endereco>();
            }
        }

        public class Contexto : DbContext
        {
            public DbSet<Pessoa> Pessoas { get; set; }
            public DbSet<Endereco> Enderecos { get; set; }
            public DbSet<Tpende> Tpend { get; set; }

        }

        public class Gestor<T> where T : class
        {
            public void salvar(T item)
            {
                using (Contexto bd = new Contexto())
                {
                    bd.Set<T>().Add(item);
                    bd.SaveChanges();
                }
            }
        }

    }






    • Editado Camilassos quinta-feira, 18 de julho de 2013 11:38 erro gramatical
    quarta-feira, 17 de julho de 2013 20:32

Todas as Respostas

  • Galera, esto comecando agora com c# e me deparei com o seguinte problema: Após executar o codigo abaixo, na tabela Tende deveria ter apenas um registro, e esta aprecendo dois.  alguém consegue me indicar o que estou fazendo de errado???

    Em qual tabela está aparecendo dois registros? Você passou duas tabelas.. Caso seja a de endereço está correto ter dois registros, pois você está passando dois endereços.

    quarta-feira, 17 de julho de 2013 20:49
  • na tabela "Tpende".

    • Editado Camilassos quinta-feira, 18 de julho de 2013 11:15 nome da tabela errada
    quinta-feira, 18 de julho de 2013 11:14