1
I’m creating an app like a bench to train C, but I ran into a situation. I have a database with the tables Accounts, Clients and Tiposconta. In the table Tiposconta there are registered the item "Savings" with ID "1" and the item "Chain" with ID "2". When I register a new account, I load the Account Types into a combobox to select the desired type. My question is as follows, how do I make so that when I register the account the ID of the account type is assigned to the new object "account" created?
Follow the code below:
Classe Conta:
public class Conta
{
[Key]
public int numero { get; set; }
public double saldo { get; protected set; }
public TipoConta tipoConta { get; set; }
public Cliente cliente { get; set; }
public Conta(Cliente idCliente)
{
this.cliente = idCliente;
this.numero = numero;
this.saldo = saldo;
this.tipoConta = tipoConta;
}
Class Typoconta
public class TipoConta
{
public int id { get; set; }
public string descricao { get; set; }
public TipoConta()
{
}
}
Form Cadastrodecontas
public partial class CadastroDeContas : Form
{
private CaixaEletronico aplicacaoPrincipal;
public CadastroDeContas(CaixaEletronico aplicacaoPrincipal)
{
this.aplicacaoPrincipal = aplicacaoPrincipal;
InitializeComponent();
}
private void CadastroDeContas_Load(object sender, EventArgs e)
{
using (BancoContext contexto = new BancoContext())
{
comboTipoConta.DataSource = contexto.TiposConta.ToList();
comboTipoConta.ValueMember = "id";
comboTipoConta.DisplayMember = "descricao";
comboTipoConta.Refresh();
comboTipoConta.SelectedIndex = -1;
//comboTipoConta.Items.Add("CORRENTE");
//comboTipoConta.Items.Add("POUPANÇA");
}
}
public void Limpar()
{
txtTitularNovaConta.Text = "";
txtCpf.Text = "";
comboTipoConta.Text = "";
}
public void btnCadastrar_Click(object sender, EventArgs e)
{
using (var contexto = new BancoContext())
{
var tiposConta = contexto.TiposConta.ToList();
}
if (txtTitularNovaConta.Text != "")
{
//converte os textos de entrada
string nome = txtTitularNovaConta.Text;
string cpf = txtCpf.Text;
if (comboTipoConta.SelectedIndex >= 0)
{
//verifica se conta poupança ou corrente
switch (comboTipoConta.SelectedIndex)
{
case 0:
Cliente cliente = new Cliente();
Conta conta = new Conta();
cliente.Cpf = cpf;
cliente.Nome = nome;
conta.cliente = cliente;
this.aplicacaoPrincipal.AdicionaConta(cliente, conta);
using (var contexto = new BancoContext())
{
var tiposConta = contexto.TiposConta.ToList();
conta.tipoConta.id = Convert.ToInt32(comboTipoConta.ValueMember);
contexto.Clientes.Add(cliente);
contexto.Contas.Add(conta);
contexto.SaveChanges();
aplicacaoPrincipal.AdicionaConta(cliente, conta);
}
MessageBox.Show("Conta " + comboTipoConta.SelectedItem + " cadastrada com Sucesso");
Limpar();
break;
case 1:
Cliente cl = new Cliente();
Conta c = new Conta();
cl.Cpf = cpf;
cl.Nome = nome;
c.cliente = cl;
c.tipoConta.descricao = comboTipoConta.SelectedItem.ToString();
c.tipoConta.id = Convert.ToInt16(comboTipoConta.ValueMember);
this.aplicacaoPrincipal.AdicionaConta(cl, c);
using (var contexto = new BancoContext())
{
contexto.Clientes.Add(cl);
contexto.Contas.Add(c);
contexto.SaveChanges();
aplicacaoPrincipal.AdicionaConta(cl, c);
}
MessageBox.Show("Conta " + comboTipoConta.SelectedItem + " cadastrada com Sucesso");
Limpar();
break;
}
The problem is that you are picking up an object that already exists in your database and ADD it, you have to ADD the object that you are actually inserting and attaching what already exists.
– Marco Souza