public void GuardarProfesional(Profesional profesional)
        {
            var usersManager        = new UsersManager();
            var entityDetailManager = new DetallePersonaManager();

            if (profesional.UserID == 0)//Profesional nuevo
            {
                var transaction = SqlDataAccess.OpenTransaction(ConfigurationManager.ConnectionStrings["StringConexion"].ToString());
                try
                {
                    SessionData.Set("Transaction", transaction);

                    profesional.UserID = usersManager.insertarUsuario(profesional as User);

                    var detalleID = entityDetailManager.AddDetallePersona(profesional as User);

                    SqlDataAccess.ExecuteNonQuery(
                        "[SHARPS].InsertProfesional", SqlDataAccessArgs
                        .CreateWith("@Matricula", profesional.Matricula)
                        .And("@ID", profesional.UserID)
                        .And("@Rol", profesional.RoleID)
                        .Arguments,
                        transaction);

                    SessionData.Remove("Transaction");
                    SqlDataAccess.Commit(transaction);
                }
                catch
                {
                    SqlDataAccess.Rollback(transaction);
                    profesional.UserID = 0;
                    throw;
                }
            }
            else //Editando un profesional
            {
                entityDetailManager.UpdateDetallePersona(profesional.DetallesPersona, profesional.UserID);
                SqlDataAccess.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["StringConexion"].ToString(),
                                              "[SHARPS].UpdateProfesional", SqlDataAccessArgs
                                              .CreateWith("@Matricula", profesional.Matricula)
                                              .And("@ID", profesional.UserID)
                                              .Arguments);
            }
            InsertarEspecialidades(profesional);
        }
        public long GuardarAfiliado(Afiliado afiliado)
        {
            var usersManager     = new UsersManager();
            var _detallesManager = new DetallePersonaManager();

            if (afiliado.UserID == 0)//NUEVO USUARIO
            {
                var transaction = SqlDataAccess.OpenTransaction(ConfigurationManager.ConnectionStrings["StringConexion"].ToString());
                try
                {
                    afiliado.UserID = usersManager.insertarUsuario(afiliado as User);
                    var detalleID = _detallesManager.AddDetallePersona(afiliado as User);
                    if (afiliado.NroAfiliado == 0)//Primero del grupo familiar
                    {
                        afiliado.NroAfiliado = SqlDataAccess.ExecuteScalarQuery <int>(ConfigurationManager.ConnectionStrings["StringConexion"].ToString(),
                                                                                      "[SHARPS].InsertAfiliado", SqlDataAccessArgs
                                                                                      .CreateWith("@PlanMedico", afiliado.PlanMedico.ID)
                                                                                      .And("@ID", afiliado.UserID)
                                                                                      .And("@EstadoCivil", afiliado.EstadoCivil)
                                                                                      .And("@CantHijos", afiliado.CantHijos)
                                                                                      .Arguments);
                        //Inserta, y devuelve el grupo familiar que se le creo
                    }
                    else
                    {
                        afiliado.NroAfiliado = SqlDataAccess.ExecuteScalarQuery <int>(ConfigurationManager.ConnectionStrings["StringConexion"].ToString(),
                                                                                      "[SHARPS].InsertMiembroGrupoFamiliar", SqlDataAccessArgs
                                                                                      .CreateWith("@PlanMedico", afiliado.PlanMedico.ID)
                                                                                      .And("@EstadoCivil", afiliado.EstadoCivil)
                                                                                      .And("@CantHijos", afiliado.CantHijos)
                                                                                      .And("@RolAfiliado", afiliado.RoleID)
                                                                                      .And("@GrupoFamiliar", afiliado.NroAfiliado)
                                                                                      .And("@TipoAfiliado", afiliado.tipoAfiliado)
                                                                                      .And("@UserID", afiliado.UserID)
                                                                                      .Arguments);
                        //Inserta el usuario, y le paso el tipo de afiliado
                    }
                    SessionData.Remove("Transaction");
                    SqlDataAccess.Commit(transaction);
                    return(afiliado.NroAfiliado);
                }catch {
                    SqlDataAccess.Rollback(transaction);
                    afiliado.UserID = 0;
                    throw;
                }
            }
            else
            {
                _detallesManager.UpdateDetallePersona(afiliado.DetallesPersona, afiliado.UserID);
                SqlDataAccess.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["StringConexion"].ToString(),
                                              "[SHARPS].UpdateAfiliado", SqlDataAccessArgs
                                              .CreateWith("@PlanMedico", afiliado.PlanMedico.ID)
                                              .And("@ID", afiliado.UserID)
                                              .And("@EstadoCivil", afiliado.EstadoCivil)
                                              .And("@RolAfiliado", afiliado.RoleID)
                                              .And("@CantHijos", afiliado.CantHijos)
                                              .And("@Motivo", afiliado.MotivoCambio)
                                              .Arguments);
                //Guarda la informacion del usuario
                return(0);
            }
        }