public ActionResult Edit(Pessoa obj)
 {
     using(ISession session = NHibernateHelper.OpenSession()) {
         using(ITransaction transaction = session.BeginTransaction()) {
             try {
                 foreach(Telefone tel in obj.Telefones) {
                     tel.Pessoa = obj;
                 }
                 session.Merge(obj);
                 transaction.Commit();
                 ViewData[Constantes.VD_MSG_SUCESSO] =
                     Constantes.MSG_SUCESSO_REGISTRO_ATUALIZADO;
             } catch(PropertyValueException) {
                 ViewData[Constantes.VD_MSG_ERRO] =
                         Constantes.MSG_ERRO_REGISTRO_ATUALIZADO;
                 transaction.Rollback();
             } catch(SqlException se) {
                 ViewData[Constantes.VD_MSG_ERRO] =
                         Constantes.MSG_ERRO_REGISTRO_ATUALIZADO
                         + @" :: " + se.Message;
                 transaction.Rollback();
             } catch(GenericADOException ge) {
                 ViewData[Constantes.VD_MSG_ERRO] =
                         Constantes.MSG_ERRO_REGISTRO_ATUALIZADO
                         + @" :: " + (ge.InnerException != null ?
                             ge.InnerException.Message : ge.Message);
                 transaction.Rollback();
             }
         }
     }
     return View("Edit", obj);
 }
 public ActionResult Edit(int id)
 {
     Pessoa obj = new Pessoa();
     if(id > 0) {
         obj = NHibernateHelper.OpenSession().CreateCriteria<Pessoa>()
             .Add(Restrictions.Eq(Projections.Property(Pessoa.ID), id))
             .UniqueResult<Pessoa>();
     }
     return View("Edit", obj);
 }