miércoles, 5 de marzo de 2014

Entity Framework y Web Service REST.

Como sabemos las aplicaciones de la windows store no pueden acceder a una base de datos directamente, esto se debe a que necesitan ser independientes para eliminar cualquier dependencia y así cualquier persona las puede descargar sin la necesidad de configurar un gestor de bases de datos directamente en su ordenador, por lo que normalmente se utiliza un Web Service  que se encarga de recuperar y actualizar datos.

El Entity Framework se encarga de implementar una abstracción de las tablas de la base de datos creando entidades de ellas, esto ayuda al desarrollador a reducir la cantidad de código de manera considerable.

Comenzaremos con nuestro ejemplo donde primero vamos a acceder a SQL Server utilizando el Server Name "(localdb)\v11.0" este es el string de conexión que identifica la versión de SQL Server que viene instalado con Visual Studio.


Ahora continuaremos con realizar nuestra base de datos que utilizaremos en el ejemplo.




Ahora pasaremos a Visual Studio donde vamos a crear un nuevo proyecto que sera una aplicacion Windows Store.


Ahora con nuestra solución creada vamos a añadir un nuevo proyecto dentro de nuestra solución.
El nuevo proyecto añadido sera del tipo "ASP.NET Web Application"  lo seleccionamos y le damos en OK.


Ahora seleccionamos el tipo, que sera una Web Api y presionamos el botón OK.


Después de crearlo nos aparecerá la siguiente pantalla.




Seleccionamos nuestra solución y daremos click derecho y seleccionamos "Set StarUp Project.".
*Seleccionamos "Multiple startup project"
*En nuestro servicio seleccionamos la acción "Start without debugging".
*En nuestra aplicación seleccionamos la acción "Start".
Ya seleccionando las acciones anteriores presionamos el botón aceptar.


Seleccionamos nuestro servicio y le damos click derecho y seleccionamos "propierities" saldrá la pantalla como la imagen siguiente.
Vamos a la pestaña Web y seleccionamos "Don´t open a page, wait for a request from an external application",


En el apartado de Servers en "Project Url" cambiaremos el puerto por ejemplo yo estoy usando el  50001, el IIS Express asigna un puerto aleatorio pero lo cambiaremos por uno definido por nosotros,
y presionamos "Create Virtual Directory".


Ahora agregaremos un Entity Model a nuestro servicio, para esto daremos click derecho  a nuestro servicio, seleccionamos "Add" y después "New Item". 
Seleccionamos "Data" y seleccionamos "ADO.NET Entity Model" y presionamos Add.


Ahora seleccionaremos "Generate From database" y presionamos Next


Ahora crearemos una nueva conexión.


En server name  pondremos (localdb)v11.0 para conectar a nuestra base de datos que creamos anteriormente y seleccionamos la base de datos antes creada.


Seleccionamos el Entity Framework 5.0 y presionamos Next.


Ahora desplegamos seleccionamos Tables y desplegamos para ver que esta seleccionada nuestra base de datos y presionamos finish.


Después de agregar nuestra entidad tendrá que salir como aparece en la siguiente imagen.



Otra vez seleccionaremos nuestro servicio y ahora agregaremos un nuevo "Scaffolded Item", este incluye generadores de códigos pre instalados, este creara el un controller con los métodos de "GET,PUT,POST,DELETE" para tener acceso o modificar los datos de nuestra base de datos.


Seleccionamos "Web Api Controller with actions, using Entity Framework" y presionamos Add.


Ingresamos el nombre de nuestro controller, seleccionamos el model antes creado  y el data context. y presionamos Add.


estos son los nuevos métodos que se crearon automáticamente al agregar el "Scaffolded Item".


Vamos a verificar que nuestro servicio este funcionando perfectamente, lo seleccionamos damos click derecho y vamos a la opción View y seleccionamos "View in Browser" en mi caso aparece el navegador google chrome ya que es mi navegador predeterminado.


Nos tendrá que aparecer en el navegador como en la siguiente imagen.


Verificamos que nuestro servicio esta accediendo a los datos, en la barra de direcciones agregamos la siguiente dirección http://localhost:50001/api/Datos_Usuarios, con esta dirección obtendremos todos los datos de la base de datos en xml o en Json, o si necesitamos un usuario en especifico pasaremos el  Id del usuario en la url por ejemplo quedaría así para obtener los datos del usuario con Id = 1, http://localhost:50001/api/Datos_Usuarios/1.
A continuación insertare los  ejemplos .




Ahora si comenzaremos con la interfaz de nuestra aplicación donde utilizaremos nuestros Web Service antes creados.
*Primero Agregaremos un ListView donde mostraremos todos los usuarios de nuestra base de datos.
*Agregaremos nuestros campos donde insertaremos usuarios nuevos a nuestra base de datos.


A continuacion pondre el codigo que utilizamos en la aplicacion.



using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace ServiciosRest
{
  
    
    public sealed partial class MainPage : Page
    {
        //Declaramos la Url del servidor al que vamos a acceder.
        private const string serverurl = "http://localhost:50001";
        //Declaramos un HttpCliet ;
        private HttpClient client = null;
       // Declaramos la lista donde llenaremos los datos .
        List &ltDatos_Usuarios&gt datos_usuarios = new List &ltDatos_Usuarios&gt();
        public MainPage()
        {
            this.InitializeComponent();
            //Inicializamos la variable de cliente
            this.client = new HttpClient();
            this.client.BaseAddress = new Uri(serverurl);
            this.client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            GetDataasync();
        }
        //En este metodo obtendremos todos los datos de la base de datos
        public async Task GetDataasync() 
        {
            try
            {
                //Obtenemos los datos 
                var response = await this.client.GetAsync("api/Datos_Usuarios");
                if(response.IsSuccessStatusCode)
                {
                    //leemos los datos y los agregamos a una lista y los agregamos a nuestro listview
                    var customerdata = await response.Content.ReadAsAsync &ltIEnumerable &ltDatos_Usuarios&gt&gt();
                    this.datos_usuarios = customerdata as List &ltDatos_Usuarios>
                    listview.Items.Clear();
                    foreach (Datos_Usuarios x in datos_usuarios) 
                    {
                        listview.Items.Add(" " + x.Nombre + " " + x.Paterno + " " + x.Materno + " " + " " + x.Telefono + " " + x.Email + " " + x.Direccion + " "+ x.Edad.ToString());
                    }
                    
                }
                else
                {

                }
            }
            catch 
            {

            }
        }

        public async void SaveAsync() 
        {
            //llenamos nuestra entidad con los datos que estan en los textbox
            Datos_Usuarios datos = new Datos_Usuarios();
            datos.Nombre = txtnombre.Text;
            datos.Paterno = txtpaterno.Text;
            datos.Materno = txtmaterno.Text;
            datos.Telefono = txttelefono.Text;
            datos.Email = txtmail.Text;
            datos.Direccion = txtdireccion.Text;
            datos.Edad = Convert.ToDouble(txtedad.Text);
            try
            {
                //Ingresamos los datos a nuestra base de datos y actualizamos el listview
                var response = await this.client.PostAsJsonAsync("api/Datos_Usuarios", datos);
                if (response.IsSuccessStatusCode)
                {
                    if (response.IsSuccessStatusCode)
                    {
                        GetDataasync();

                    }
                }
            }
            catch
            {

            }
           
        }
        private void btnguardar_Click(object sender, RoutedEventArgs e)
        {
            //llamamos el metodo de guardar y limpiamos los campos.
            SaveAsync();
            txtnombre.Text = "";
            txtpaterno.Text = "";
            txtmaterno.Text = "";
            txttelefono.Text = "";
            txtmail.Text = "";
            txtdireccion.Text = "";
            txtedad.Text = "";
        }
        //Entidad de Datos_Usuarios
        public class Datos_Usuarios
        {
            public int Id_Persona { get; set; }
            public string Nombre { get; set; }
            public string Paterno { get; set; }
            public string Materno { get; set; }
            public string Telefono { get; set; }
            public string Email { get; set; }
            public string Direccion { get; set; }
            public double Edad { get; set; }
        }

        
    }
}
Esto es todo de este ejemplo espero y les halla ayudado.

No hay comentarios:

Publicar un comentario