Olá pessoal, estou seguindo os passos do curso de Entity Framework 7 usando formulários Windows Form ao invés de Console Application. Todas as funções do DAO funcionam perfeitamente, exceto o Atualizar (usando SaveChanges()). No formulário, eu modifico os campos e clico no botão salvar, porém o banco não salva as alterações devidas. A inclusão de novos cadastros está ok. Implementei este botão para salvar um novo registro se a bool "novoCadastro" for true, caso contrário no else ele deveria apenas atualizar os campos modificados:
No formulário FrmCadastroFabricante está assim:
namespace Cadastro_de_Bombas.Formularios
{
public partial class FrmCadastroFabricantes : Form
{
//Instanciando as classes de contexto
EntidadesContext contexto = new EntidadesContext();
FabricanteDAO fabricanteDAO;
//Variáveis públicas do formulário.
bool novoCadastro;
//Construtor do formulário
public FrmCadastroFabricantes()
{
this.fabricanteDAO = new FabricanteDAO(this.contexto);
InitializeComponent();
}
private void FrmCadastroFabricantes_Load(object sender, EventArgs e)
{
btnNovoFabricante.Enabled = true;
btnSalvarFabricante.Enabled = false;
btnCancelarFabricante.Enabled = false;
btnExcluirFabricante.Enabled = false;
tbPesquisaFabricantePorID.Enabled = true;
btnPesquisarFabricantePorID.Enabled = true;
tbIdFabricante.Enabled = false;
cbStatusFabricante.Enabled = false;
tbNomeFabricante.Enabled = false;
}
private void btnNovoFabricante_Click(object sender, EventArgs e)
{
btnNovoFabricante.Enabled = false;
btnSalvarFabricante.Enabled = true;
btnCancelarFabricante.Enabled = true;
btnExcluirFabricante.Enabled = true;
tbPesquisaFabricantePorID.Enabled = false;
btnPesquisarFabricantePorID.Enabled = false;
tbIdFabricante.Enabled = true;
cbStatusFabricante.Enabled = true;
tbNomeFabricante.Enabled = true;
novoCadastro = true;
}
//Botão Salvar (Inclui no banco se for novo e Salva alterações se os campos forem modificados
private void btnSalvarFabricante_Click(object sender, EventArgs e)
{
Fabricante f = new Fabricante()
{
Status_Fabricante = cbStatusFabricante.Text,
Nome_Fabricante = tbNomeFabricante.Text
};
if (novoCadastro)
//Se for um novo cadastro, o registro será ADICIONADO ao banco.
{
contexto.Fabricantes.Add(f);
contexto.SaveChanges();
MessageBox.Show("Cadastro incluído com sucesso.");
}
else
//Se for apenas aberto, o registro será apenas ALTERADO no banco.
{
//Aqui deveria atualizar os campos modificados no banco:
contexto.SaveChanges();
MessageBox.Show("Cadastro alterado com sucesso.");
}
btnNovoFabricante.Enabled = true;
btnSalvarFabricante.Enabled = false;
btnCancelarFabricante.Enabled = false;
btnExcluirFabricante.Enabled = false;
tbPesquisaFabricantePorID.Enabled = true;
btnPesquisarFabricantePorID.Enabled = true;
tbIdFabricante.Enabled = false;
cbStatusFabricante.Enabled = false;
tbNomeFabricante.Enabled = false;
tbIdFabricante.Text = "";
cbStatusFabricante.Text = "";
tbNomeFabricante.Text = "";
tbPesquisaFabricantePorID.Text = "";
}
private void btnCancelarFabricante_Click(object sender, EventArgs e)
{
btnNovoFabricante.Enabled = true;
btnSalvarFabricante.Enabled = false;
btnCancelarFabricante.Enabled = false;
btnExcluirFabricante.Enabled = false;
tbPesquisaFabricantePorID.Enabled = true;
btnPesquisarFabricantePorID.Enabled = true;
tbIdFabricante.Enabled = false;
cbStatusFabricante.Enabled = false;
tbNomeFabricante.Enabled = false;
tbIdFabricante.Text = "";
cbStatusFabricante.Text = "";
tbNomeFabricante.Text = "";
tbPesquisaFabricantePorID.Text = "";
}
private void btnPesquisarFabricantePorID_Click(object sender, EventArgs e)
{
novoCadastro = false;
Fabricante fabricanteBuscadoPorID = fabricanteDAO.BuscaFabricantePorId(Convert.ToInt32(tbPesquisaFabricantePorID.Text));
if (fabricanteBuscadoPorID == null)
{
MessageBox.Show("Nenhum registro foi encontrado com o ID informado!");
}
else
{
tbIdFabricante.Text = fabricanteBuscadoPorID.ID.ToString();
cbStatusFabricante.Text = fabricanteBuscadoPorID.Status_Fabricante.ToString();
tbNomeFabricante.Text = fabricanteBuscadoPorID.Nome_Fabricante.ToString();
}
btnNovoFabricante.Enabled = false;
btnSalvarFabricante.Enabled = true;
btnCancelarFabricante.Enabled = true;
btnExcluirFabricante.Enabled = true;
tbPesquisaFabricantePorID.Enabled = false;
btnPesquisarFabricantePorID.Enabled = false;
tbIdFabricante.Enabled = true;
cbStatusFabricante.Enabled = true;
tbNomeFabricante.Enabled = true;
}
private void btnExcluirFabricante_Click(object sender, EventArgs e)
{
Fabricante fabricanteBuscadoPorID = fabricanteDAO.BuscaFabricantePorId(Convert.ToInt32(tbPesquisaFabricantePorID.Text));
fabricanteDAO.RemoveFabricante(fabricanteBuscadoPorID);
MessageBox.Show("Cadastro removido com sucesso.");
btnNovoFabricante.Enabled = true;
btnSalvarFabricante.Enabled = false;
btnCancelarFabricante.Enabled = false;
btnExcluirFabricante.Enabled = false;
tbPesquisaFabricantePorID.Enabled = true;
btnPesquisarFabricantePorID.Enabled = true;
tbIdFabricante.Enabled = false;
cbStatusFabricante.Enabled = false;
tbNomeFabricante.Enabled = false;
tbIdFabricante.Text = "";
cbStatusFabricante.Text = "";
tbNomeFabricante.Text = "";
}
}
}
E na Classe DAO (FabricanteDAO) está assim:
public class FabricanteDAO
{
private EntidadesContext contexto;
public FabricanteDAO(EntidadesContext contexto)
{
this.contexto = contexto;
}
public void AdicionaFabricante(Fabricante f)
{
this.contexto.Fabricantes.Add(f);
this.contexto.SaveChanges();
}
//Atualiza Fabricante
public void SaveChanges()
{
this.contexto.SaveChanges();
}
public void RemoveFabricante(Fabricante f)
{
this.contexto.Fabricantes.Remove(f);
this.contexto.SaveChanges();
}
public Fabricante BuscaFabricantePorId(int id)
{
return this.contexto.Fabricantes.FirstOrDefault(f => f.ID == id);
}
}
Obs: já tentei usar o método .Update() também e não funcionou. No console apllication seguindo os passos do Renan deu certo. Poderiam me ajudar, por favor? Grande abraço!