none
Atualizar dados com entity framework RRS feed

  • Pergunta

  • Salve galera, primeiramente gostaria de me desculpar caso o tópico esteja um pouco fora do contexto, ainda sou iniciante em POO, e as dúvidas são enormes....Bem, a minha dúvida hoje é a seguinte: Estou desenvolvendo uma aplicação básica com o auxílio das seguintes tecnologias, Windows Azure, Ado.net EF, MVC3, Razor e Jquery. Já percebi o poder de criar o CRUD através dos assistentes da framework,  e pude ver como funcionam, entretanto, a minha aplicação foge um pouco do normal, uma vez que ainda uso, ajax e jquery.....vou direto ao assunto meus caros colegas.....Preciso editar uns dados que claro, são enviados através de um formulário......jquery pop-up modal......e no controller, nao estou conseguindo salvar as alterações....vejam abaixo se conseguem me ajudar.

            [HttpPost]
            public ActionResult Edit(Employee employee)//os dados do form chegam aqui certinho
            {
                Employee employees = db.Employees.Single(f => f.EmployeesId == employee.EmployeesId);
                db.ObjectStateManager.ChangeObjectState(employees, EntityState.Modified);
                db.SaveChanges();
    	    //essa view bag é necessaria para apresentar os dados quando retornar
                var dados = (from usuarios in db.Employees
                             where usuarios.Status == true
                             orderby usuarios.Name ascending
                             select usuarios).ToList();
    
                ViewBag.Dados = dados;
                return View("Index");
            }
    desde já agradeço pela atenção!

    quinta-feira, 22 de novembro de 2012 18:19

Respostas

  • Bem, volto a postar a minha solução..... Infelizmente de uma maneira não muito elegante, entretanto funcional.....

    Giovanni Bassi em seu artigo http://blog.lambda3.com.br/2009/04/entity-framework-em-cenarios-distribuidos/ deixa claro uma outra forma de fazer o update, entretanto com um preço mais alto, uma nova viagem ao banco de dados, abaixo esta o código que usei na minha aplicação.....como eu disse logo a cima, mais cara, porém funcional......

     [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(FormCollection collection)
            {
                Guid id = new Guid(collection[0]);
                try
                {
                    var employees = (from a in db.tabela
                               where a.tabelaid== id
                               select tabela).FirstOrDefault();
                    UpdateModel(employees);
    
                    db.SaveChanges();
    
                    
    
                    return View("Index");
                }
                catch (Exception ex)
                {
                    return View("Index");
                }
            } 

    Obrigado.

    • Marcado como Resposta Fabio.Junio sexta-feira, 23 de novembro de 2012 13:34
    sexta-feira, 23 de novembro de 2012 13:32

Todas as Respostas

  • Bom pessoa, como o tempo urge, achei uma solução neste endereço.... http://blog.lambda3.com.br/2009/04/entity-framework-em-cenarios-distribuidos/

    Abaixo esta o novo codigo:

            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(Employee employee)
            {
                 Update(db,"Employees", employee);
                 db.SaveChanges();
    
    
                var dados = (from usuarios in db.Employees
                             where usuarios.Status == true
                             orderby usuarios.Name ascending
                             select usuarios).ToList();
    
                ViewBag.Dados = dados;
                return View("Index");
            }
    
          
    
    
            public static void Update(ObjectContext context, string entitySetName, IEntityWithKey entity)
            {
                entity.EntityKey = context.CreateEntityKey(entitySetName, entity);
                context.Attach(entity);
                var stateEntry = context.ObjectStateManager.GetObjectStateEntry(entity.EntityKey);
                var propertyNameList = stateEntry.CurrentValues.DataRecordInfo.FieldMetadata.Select(pn => pn.FieldType.Name);
                foreach (var propName in propertyNameList)
                {
                    stateEntry.SetModifiedProperty(propName);
                }
            }

    Entretanto agora me da o seguinte erro:

    A instrução UPDATE conflitou com a restrição do FOREIGN KEY "FK_Employees_Branchs". O conflito ocorreu no bando de dados "XYZ", tabela "dbo.Branchs", column 'BranchId'.
    A instrução foi finalizada.

    Alguém poderia me ajudar?

    quinta-feira, 22 de novembro de 2012 19:18
  • Bem, volto a postar a minha solução..... Infelizmente de uma maneira não muito elegante, entretanto funcional.....

    Giovanni Bassi em seu artigo http://blog.lambda3.com.br/2009/04/entity-framework-em-cenarios-distribuidos/ deixa claro uma outra forma de fazer o update, entretanto com um preço mais alto, uma nova viagem ao banco de dados, abaixo esta o código que usei na minha aplicação.....como eu disse logo a cima, mais cara, porém funcional......

     [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(FormCollection collection)
            {
                Guid id = new Guid(collection[0]);
                try
                {
                    var employees = (from a in db.tabela
                               where a.tabelaid== id
                               select tabela).FirstOrDefault();
                    UpdateModel(employees);
    
                    db.SaveChanges();
    
                    
    
                    return View("Index");
                }
                catch (Exception ex)
                {
                    return View("Index");
                }
            } 

    Obrigado.

    • Marcado como Resposta Fabio.Junio sexta-feira, 23 de novembro de 2012 13:34
    sexta-feira, 23 de novembro de 2012 13:32