override public int create(Cliente cliente)
        {
            int idCliente = 0;
            RepositorioIdentidad repoIdentidad = new RepositorioIdentidad();

            if (this.exists(cliente) || repoIdentidad.exists(cliente.getIdentidad()))
            {
                throw new ElementoYaExisteException("Ya existe un cliente o un usuario con el mismo documento o el mismo mail.");
            }
            else
            {
                //llamo a crear la identidad y traigo el IdIdentidad
                int idIdentidad = repoIdentidad.create(cliente.getIdentidad());

                //llamo a crear la direccion y traigo el IdDireccion, le seteo el idIdentidad que lo necesita
                cliente.getIdentidad().getDireccion().setIdIdentidad(idIdentidad);
                RepositorioDireccion repoDireccion = new RepositorioDireccion();
                int idDireccion = repoDireccion.create(cliente.getIdentidad().getDireccion());

                //ahora ya tengo todo para crear el cliente

                String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
                SqlConnection sqlConnection    = new SqlConnection(connectionString);
                SqlCommand    sqlCommand       = new SqlCommand();
                SqlDataReader reader;

                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Connection  = sqlConnection;
                sqlCommand.Parameters.AddWithValue("@Activo", cliente.getActivo());
                sqlCommand.Parameters.AddWithValue("@idIdentidad", idIdentidad);

                StringBuilder sqlBuilder = new StringBuilder();
                sqlBuilder.Append(@"
                    BEGIN TRY
                    BEGIN TRANSACTION

                    INSERT INTO LOS_BORBOTONES.Cliente(Activo,idIdentidad)
                    OUTPUT INSERTED.idCliente
                    VALUES(@Activo,@idIdentidad);

                    DECLARE @idCliente int;
                    SET @idCliente = SCOPE_IDENTITY();
                ");

                sqlBuilder.Append(@"
                    COMMIT
                    END TRY

                    BEGIN CATCH
                    ROLLBACK
                    END CATCH
                ");

                sqlCommand.CommandText = sqlBuilder.ToString();
                sqlConnection.Open();
                reader = sqlCommand.ExecuteReader();

                if (reader.Read())
                {
                    idCliente = reader.GetInt32(reader.GetOrdinal("idCliente"));
                }

                sqlConnection.Close();
            }

            return(idCliente);
        }
        override public int create(Usuario usuario)
        {
            int idUsuario = 0;
            RepositorioIdentidad repoIdentidad = new RepositorioIdentidad();

            if (this.exists(usuario) || repoIdentidad.exists(usuario.getIdentidad()))
            {
                throw new ElementoYaExisteException("Ya existe un usuario con el mismo nombre, o su Mail/Tipo y Numero de documento está repetido.");
            }
            else
            {
                //llamo a crear la identidad y traigo el IdIdentidad
                //RepositorioIdentidad repoIdentidad = new RepositorioIdentidad();
                int idIdentidad = repoIdentidad.create(usuario.getIdentidad());

                //llamo a crear la direccion y traigo el IdDireccion, le seteo el idIdentidad que lo necesita
                usuario.getIdentidad().getDireccion().setIdIdentidad(idIdentidad);
                RepositorioDireccion repoDireccion = new RepositorioDireccion();
                int idDireccion = repoDireccion.create(usuario.getIdentidad().getDireccion());

                //ahora ya tengo todo para crear el usuario

                String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
                SqlConnection sqlConnection    = new SqlConnection(connectionString);
                SqlCommand    sqlCommand       = new SqlCommand();
                SqlDataReader reader;

                //encripto clave
                string passwordEncriptada = this.EncriptarSHA256(usuario.getPassword());

                sqlCommand.CommandType = CommandType.Text;
                sqlCommand.Connection  = sqlConnection;
                sqlCommand.Parameters.AddWithValue("@Username", usuario.getUsername());
                sqlCommand.Parameters.AddWithValue("@Activo", usuario.getActivo());
                sqlCommand.Parameters.AddWithValue("@Password", passwordEncriptada);
                sqlCommand.Parameters.AddWithValue("@IntentosFallidosLogin", usuario.getIntentosFallidosLogin());
                sqlCommand.Parameters.AddWithValue("@idIdentidad", idIdentidad);

                StringBuilder sqlBuilder = new StringBuilder();
                sqlBuilder.Append(@"
                    BEGIN TRY
                    BEGIN TRANSACTION

                    INSERT INTO LOS_BORBOTONES.Usuario(Username,Password,IntentosFallidosLogin,Activo,idIdentidad)
                    OUTPUT INSERTED.idUsuario
                    VALUES(@Username,@Password,@IntentosFallidosLogin,@Activo,@idIdentidad);

                    DECLARE @idUsuario int;
                    SET @idUsuario = SCOPE_IDENTITY();
                ");

                //AGREGO DINAMICAMENTE LOS ROLES A LA CONSULTA
                int i = 1;
                foreach (Rol r in usuario.getRoles())
                {
                    String paramName = "@idRol" + i.ToString();
                    sqlBuilder.AppendFormat("INSERT INTO LOS_BORBOTONES.Rol_X_Usuario(idRol,idUsuario) VALUES ({0}, @idUsuario)", paramName);
                    sqlCommand.Parameters.AddWithValue(paramName, r.getIdRol());
                    i++;
                }
                //AGREGO DINAMICAMENTE LOS HOTELES A LA CONSULTA
                int k = 1;
                foreach (Hotel h in usuario.getHoteles())
                {
                    String paramName = "@idHotel" + k.ToString();
                    sqlBuilder.AppendFormat("INSERT INTO LOS_BORBOTONES.Hotel_X_Usuario(idHotel,idUsuario) VALUES ({0}, @idUsuario)", paramName);
                    sqlCommand.Parameters.AddWithValue(paramName, h.getIdHotel());
                    k++;
                }

                sqlBuilder.Append(@"
                    COMMIT
                    END TRY

                    BEGIN CATCH
                    ROLLBACK
                    END CATCH
                ");

                sqlCommand.CommandText = sqlBuilder.ToString();
                sqlConnection.Open();
                reader = sqlCommand.ExecuteReader();

                if (reader.Read())
                {
                    idUsuario = reader.GetInt32(reader.GetOrdinal("idUsuario"));
                }

                sqlConnection.Close();
            }

            return(idUsuario);
        }