lunes, 15 de julio de 2013

Acceso a Datos y Entidades

Introducción :

Muchas veces , se suele usar Entity Framework por su facilidad , ya que este nos crea automáticamente todas las entidades que necesitemos, sin embargo todo lo fácil tiene sus desventajas ,como por ejemplo si modificamos un procedimiento almacenado , este no se refleja de inmediato en la aplicación , por lo que debemos actualizarlo manualmente. Hoy veremos como accesar a datos y asignar valores a las entidades mediante clases, usando la conocida base de datos "Neptuno".

1.Cadena de Conexión : Creamos la cadena de conexión en el archivo Web.Config
  <connectionStrings>
    <add name="ConexionNeptuno" connectionString="Data Source=localhost;Initial Catalog=Neptuno; integrated security = SSPI" providerName="System.Data.SqlClient"/>
  </connectionStrings>


 2. Creamos un procedimiento almacenado sencillo para demostración.
USE [Neptuno]
GO

CREATE PROC ListarClientes
AS
SELECT IdCliente,NombreCompañia,Direccion,Pais FROM Clientes

3.  Creamos el método que nos devolverá el resultado del procedimiento almacenado, en este caso usaremos como retorno un Datatable, no se olviden que para usar el "ConfigurationManager" , debemos importar la libreria "System.Configuration" asi como para el "SqlConnecion" y "SqlCommand"  el ""System.Data.SqlClient".
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace MvcApplication1.Models
{
    public class AccesoDatos
    {
        string conex = ConfigurationManager.ConnectionStrings["ConexionNeptuno"].ConnectionString;
       
        public DataTable ListarClientes()
        {
            SqlConnection conexion = new SqlConnection(conex);
            SqlCommand comand = new SqlCommand("ListarClientes", conexion);
            comand.CommandType = CommandType.StoredProcedure;
            DataTable dt = new DataTable();
            conexion.Open();
            dt.Load(comand.ExecuteReader());
            conexion.Close();
            return dt;

        }
    }
}


4. Creando la Entidad Cliente , y definiendo sus propiedades. Aqui como lo dije al comienzo , como no usaremos las entidades autogeneradas del Entity Framework, creamos la Entidad manualmente, por lo que debemos definir un constructor.

Se preguntaran que es un constructor ?
Cada vez que se crea una clase o estructura, se llama a su constructor. Una clase o estructura puede tener varios constructores que toman argumentos diferentes. Los constructores permiten al programador establecer valores predeterminados, limitar la creación de instancias y escribir código flexible y fácil de leer.
Microsoft nos da un concepto bien claro acerca de esto : Constructores C#
public class ClienteModel
    {
        public string IdCliente { get; set; }
        public string NombreCompañia { get; set; }
        public string Direccion { get; set; }
        public string Pais { get; set; }

        public ClienteModel(object[] constructor)

        { 
            this.IdCliente = (string)constructor[0];
            this.NombreCompañia = (string)constructor[1];
            this.Direccion = (string)constructor[2];
            this.Pais = (string)constructor[3];
        }


Aqui creo un constructor llamado de igual manera que la Entidad cuyo parametro lo defino como un array.

5. Asignando valores a la Entidad.

Nos encontramos en el controlador "ClienteController" , donde podremos asignar los valores a las propiedades de la Entidad Cliente.
public class ClienteController : Controller
    {
        Models.AccesoDatos db = new AccesoDatos();

        public ActionResult Clientes()
        {
             var Clientes = db.ListarClientes();

             var lista = new List<ClienteModel>();

             foreach (DataRow r in Clientes.Rows)
             {
                 lista.Add(new ClienteModel(r.ItemArray));
             }

            var ListaClientes = lista.ToList();

            ViewBag.ListaClientes = ListaClientes;
            
            return View();
        }

    }


Que Estoy haciendo aquí ?
  1. Primero instanciamos la clase "AccesoDatos" para obtener el metodo "ListarClientes" y lo guardaremos en una variable , en este caso llamada "Clientes".
  2. Instanciamos en la variable "lista" la entidad.
  3. Como el método nos devuelve una tabla , podemos hacer un for each a la variable que guarda el resultado del mismo, definiendo una variable tipo DataRow , y recorreremos fila por fila el Datatable

        4. Finalmente con "lista.add(new ClienteModel(r.ItemArray))" , agregamos los valores a la 
            Entidad Cliente.

        Espero te sirva este pequeño instructivo , en un proximo post , veremos como llevar el 
        resultado de un controlador a una vista mediante "Razor".

1 comentario:

  1. Hola amigo bueno tu articulo pero quiero saber como lo hago para mostrar en una vista,ya que estoy haciendo un proyecto en mvc con ado net.De antemano gracias

    ResponderEliminar