Inquiridor
EF 5 x Classe genérica, duplicando registro ao adicionar.

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
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.
-
na tabela "Tpende".
- Editado Camilassos quinta-feira, 18 de julho de 2013 11:15 nome da tabela errada