Update to 2 tables

2

I can not make an update of the 2 tables. The problem is here.

  db.Entry(catequizando).State = EntityState.Modified;
  db.Entry(pessoa).State = EntityState.Modified;
  db.SaveChanges();

Any solution?

Controller :

  [HttpPost]
  [ValidateAntiForgeryToken]
     public ActionResult Edit(CatequizandoCreateModel CatequizandoModel)
    {
        if (ModelState.IsValid)
        {
            //criar um novo objeto para o model pessoa
            var pessoa = new Pessoa
            {
                Nome = CatequizandoModel.pessoa.Nome,
                Morada = CatequizandoModel.pessoa.Morada,
                Localidade = CatequizandoModel.pessoa.Localidade,
                CodPostal = CatequizandoModel.pessoa.CodPostal,
                Telemovel = CatequizandoModel.pessoa.Telemovel,
                Email = CatequizandoModel.pessoa.Email,
                Genero = CatequizandoModel.pessoa.Genero,
                Naturalidade = CatequizandoModel.pessoa.Naturalidade,
                Nacionalidade = CatequizandoModel.pessoa.Naturalidade,
                BI = CatequizandoModel.pessoa.BI,
                NIF = CatequizandoModel.pessoa.NIF,
                Estado_Civil = CatequizandoModel.pessoa.Estado_Civil,
                Profissao = CatequizandoModel.pessoa.Profissao,
                Habilitacoes_Literarias = CatequizandoModel.pessoa.Habilitacoes_Literarias,
                DataNascimento = CatequizandoModel.pessoa.DataNascimento,
                Foto = CatequizandoModel.pessoa.Foto,
                Observacoes = CatequizandoModel.pessoa.Observacoes
            };
            //   criar um novo objeto para o model Catequizando
            var catequizando = new Catequizando
            {
                NomeEscola = CatequizandoModel.catequizando.NomeEscola,
                AnoEscolar = CatequizandoModel.catequizando.AnoEscolar,
                TurmaEscolar = CatequizandoModel.catequizando.TurmaEscolar,
                CedulaCrista = CatequizandoModel.catequizando.CedulaCrista,
            };
            db.Entry(catequizando).State = EntityState.Modified;
            db.Entry(pessoa).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.CatequizandoID = new SelectList(db.Pessoa, "PessoaID", "Nome", CatequizandoModel.CatequizandoID);
        return View(CatequizandoModel);
    }
    
asked by anonymous 28.08.2015 / 18:18

3 answers

3

The approach is incorrect. This error you're having:

  

"Store update, insert, or delete statement affected by unexpected number of rows (0)."

This is when the primary key is not set. In fact you should have brought the bank records and changed them. Not having created new ones:

    if (ModelState.IsValid)
    {
        var pessoa = db.Pessoas.SingleOrDefault(p => p.PessoaId == CatequizandoModel.Pessoa.PessoaId);
        var catequizando = db.Catequizandos.SingleOrDefault(p => p.CatequizandoId == CatequizandoModel.Catequizando.CatequizandoId);

            pessoa.Nome = CatequizandoModel.pessoa.Nome;
            pessoa.Morada = CatequizandoModel.pessoa.Morada;
            pessoa.Localidade = CatequizandoModel.pessoa.Localidade;
            pessoa.CodPostal = CatequizandoModel.pessoa.CodPostal;
            pessoa.Telemovel = CatequizandoModel.pessoa.Telemovel;
            pessoa.Email = CatequizandoModel.pessoa.Email;
            pessoa.Genero = CatequizandoModel.pessoa.Genero;
            pessoa.Naturalidade = CatequizandoModel.pessoa.Naturalidade;
            pessoa.Nacionalidade = CatequizandoModel.pessoa.Nacionalidade;
            pessoa.BI = CatequizandoModel.pessoa.BI;
            pessoa.NIF = CatequizandoModel.pessoa.NIF;
            pessoa.Estado_Civil = CatequizandoModel.pessoa.Estado_Civil;
            pessoa.Profissao = CatequizandoModel.pessoa.Profissao;
            pessoa.Habilitacoes_Literarias = CatequizandoModel.pessoa.Habilitacoes_Literarias;
            pessoa.DataNascimento = CatequizandoModel.pessoa.DataNascimento;
            pessoa.Foto = CatequizandoModel.pessoa.Foto;
            pessoa.Observacoes = CatequizandoModel.pessoa.Observacoes;


            catequizando.NomeEscola = CatequizandoModel.catequizando.NomeEscola;
            catequizando.AnoEscolar = CatequizandoModel.catequizando.AnoEscolar;
            catequizando.TurmaEscolar = CatequizandoModel.catequizando.TurmaEscolar;
            catequizando.CedulaCrista = CatequizandoModel.catequizando.CedulaCrista;
        db.Entry(catequizando).State = EntityState.Modified;
        db.Entry(pessoa).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    
28.08.2015 / 18:52
3

If you are creating a new Pessoa and new Catequizando you can never make a EntityState.Modified; , because basically the items do not exist.

Or the element you are instantiating has an existing id , where you have to put id from CatequizandoModel :

var pessoa = new Pessoa
{
  id = CatequizandoModel.Pessoa.Id
  ...
}

var pessoa = new Catequizando
{
  id = CatequizandoModel.Catequizando.Id
  ...
}

Or you will immediately save the received Model data:

db.Entry(CatequizandoModel.catequizando).State = EntityState.Modified;
db.Entry(CatequizandoModel.pessoa).State = EntityState.Modified;
    
28.08.2015 / 18:40
1

If you do not need to get the data in the database before making the change, you can do the Attach before doing the SaveChanges, in some cases this is very good to avoid I / O's.

//código que cria pessoa e catequizando.....

db.Pessoas.Attach(pessoa);
db.CatequizandosAttach(catequizando);
db.Entry(pessoa).State = EntityState.Modified;
db.Entry(catequizando).State = EntityState.Modified;

db.SaveChanges();
    
28.08.2015 / 19:12