Está en la página 1de 12

Tecnologas Microsoft http://mredison.wordpress.

com

Utilizando LINQ Mapping con WCF en Visual Studio 2010 (ASP.NET C#) Parte 1
Requerimientos: Visual Studio 2010 SQL Server 2008 o SQL Server 2008 R2

Paso 1:
Crear un proyecto de tipo WCF WCF Service Application dentro de Visual Studio 2010.

Paso 2: Crear una tabla como la siguiente desde SQL Server 2008. (Este tutorial se basar en esta tabla de ejemplo): CREATE TABLE CLIENTES ( ID INT IDENTITY(1,1)NOT NULL, NOMBRE VARCHAR(50), LOCALIZACION VARCHAR(50), PRIMARY KEY(ID) );

Tecnologas Microsoft http://mredison.wordpress.com

Crear una clase llamada Cliente.cs y agregue la referencia: System.Data.Linq

Paso 3: Importar la librera System.Data.Linq.Mapping en la clase. Dentro de la arquitectura de LINQ, usted puede encontrar: LINQ a Objetos, LINQ a SQL, LINQ a Datasets, LINQ a Entidades y LINQ a XML. En tutorial se basar a LINQ a SQL, en donde se mostrar el mapeo de tablas a clases de forma manual, sin ocupar el diseador por default de LINQ to SQL Classes. Para mapear las tablas en clases, usted debe crear cada clase para cada tabla ya sea por su nombre actual de la base de datos o especificndola dentro de la clase, por ejemplo: Si usted tiene una tabla llamada Clientes, puede crear una clase llamada Clientes de la siguiente manera: using System; using System.Data.Linq.Mapping; namespace WCFLinq { [Table] public class Clientes { }

Tecnologas Microsoft http://mredison.wordpress.com O crear una clase con otro nombre, siempre y cuando se especifique el nombre real de la tabla, de la siguiente forma: using System; using System.Data.Linq.Mapping; namespace WCFLinq { [Table(Name="Clientes")] public class Cliente { } }

Paso 4: Tiene que especificar las columnas de la tabla como propiedades dentro de la clase, si la columna es PRIMARY KEY o si es de tipo IDENTITY tambin se debe de especificar, de la siguiente manera:

using System; using System.Data.Linq.Mapping;


namespace WCFLinq { [Table(Name="Clientes")] public class Cliente { [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int ID { get; set; } [Column] public string Nombre { get; set; } [Column] public string Localizacion { get; set; } } }

Tecnologas Microsoft http://mredison.wordpress.com Paso 5: Ya creada la clase Clientes, cree otra clase llamada Configuracion.cs , el cual tendr una propiedad que regresar la cadena de conexin, de la siguiente manera: using System; using System.Configuration; namespace WCFLinq { public class Configuracion { public static string CadenaConexion { get { return ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString.ToString(); } } } }

Debe agregar la referencia System.Configuration a su proyecto Paso 6: Cree una clase que ser la que se conectar a la base de datos y en donde se define la estructura general, esta clase deriva de DataContext: using System; using System.Data.Linq.Mapping; using System.Data.Linq; namespace WCFLinq { [Database (Name="CURSO")] public class Empresa:DataContext { } }

Tecnologas Microsoft http://mredison.wordpress.com Paso 7: Se crea un constructor dentro de la clase, el cual recibe como parmetro la Conexin o la Cadena de Conexin.

using System; using System.Data.Linq.Mapping; using System.Data.Linq; namespace WCFLinq { [Database (Name="CURSO")] public class Empresa:DataContext { public Empresa() : base(Configuracion.CadenaConexion) { } } }

Paso 8: Debe crear propiedades de tipo Table: using System; using System.Data.Linq.Mapping; using System.Data.Linq; namespace WCFLinq { [Database (Name="CURSO")] public class Empresa:DataContext { public Empresa() : base(Configuracion.CadenaConexion) { }

public Table<Cliente> Clientes;


} }

Tecnologas Microsoft http://mredison.wordpress.com El esquema de clases sera el siguiente:

Paso 9: Defina una interfaz con los siguientes mtodos, esta interfaz se implementar en el servicio web.
Referencia WCF en MSDN: http://msdn.microsoft.com/en-us/library/aa480190.aspx

using using using using

System; System.Collections.Generic; System.Linq; System.ServiceModel;

namespace WCFLinq { [ServiceContract] public interface IMetodos { [OperationContract] List<Cliente> ObtenerClientes();


[OperationContract] List<Cliente> ObtenerClientesPorLocalizacion(string localizacion); } }

Paso 10: Implementar la interfaz en la clase del servicio web. (En este tutorial se ha cambiado de nombre a la clase Service1)

Tecnologas Microsoft http://mredison.wordpress.com La clase Servicio implementa la interfaz IMetodos, se crea un objeto de tipo DataContext y despus se realizarn las consultas ocupando LINQ.
using using using using using using System; System.Collections.Generic; System.Linq; System.Runtime.Serialization; System.ServiceModel; System.ServiceModel.Web;

namespace WCFLinq { public class Servicio : IMetodos { Empresa bd = new Empresa(); public List<Cliente> ObtenerClientes() { var consulta = from cl in bd.Clientes select cl; return consulta.ToList(); } public List<Cliente> ObtenerClientesPorLocalizacion(string localizacion) { var consulta = from cl in bd.Clientes where cl.Localizacion.Contains(localizacion) select cl; return consulta.ToList(); } } }

Paso 11: Debe agregar una cadena de conexin dentro del web.config de la siguiente forma:
<connectionStrings> <add name="CadenaConexion" connectionString="Data Source=.\MSPDEVELOPER;Initial Catalog=CURSO;Integrated Security=true;"/> </connectionStrings>

Paso 12: Compilar y construir la solucin.

Tecnologas Microsoft http://mredison.wordpress.com

ASP.NET Website
Paso 1: Agregue un nuevo sitio web a la solucin:

Paso 2: Agregue la referencia del servicio WCF de la siguiente manera:

Tecnologas Microsoft http://mredison.wordpress.com Paso 3: Especifique la URL del servicio, en este caso el servicio debe implementar la interfaz anteriormente creada con los mtodos.

Paso 4: Dentro del proyecto ASP.NET, agregue un GridView llamado gvClientes y desde el evento Page_Load llamar el servicio mediante el mtodo implementado. using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ServicioWCF.MetodosClient proxy = new ServicioWCF.MetodosClient(); gvClientes.DataSource=proxy.ObtenerClientes(); gvClientes.DataBind(); } }

Tecnologas Microsoft http://mredison.wordpress.com Paso 5: Compilar y ejecutar la aplicacin.

Paso 6: Usted puede realizar consultas sobre consultas con LINQ de manera muy fcil y dinmica. Por ejemplo existe un mtodo llamado ObtenerClientes() que regresa toda la informacin de los clientes, id, nombre y localizacin. Si se requiere solamente las localizaciones pero que no se repitan y que se muestren dentro de un DropDownList. Usted puede definir una subconsulta de la siguiente manera:
using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ServicioWCF.MetodosClient proxy = new ServicioWCF.MetodosClient(); gvClientes.DataSource=proxy.ObtenerClientes(); gvClientes.DataBind(); var consulta = (from cl in proxy.ObtenerClientes() select cl.Localizacion).Distinct(); ddLocalizacion.DataSource = consulta.ToList(); ddLocalizacion.DataBind(); } }

Tecnologas Microsoft http://mredison.wordpress.com Paso 7: Compilar y ejecutar la aplicacin.

Paso 8: Se debe vincular el resultado de acuerdo a la Localizacin seleccionada, se debe realizar un AutoPostBack en el DropDownList y pasar como parmetro el nombre de la localizacin al mtodo ObtenerClientesPorLocalizacion(string localizacion) definido en la interfaz del servicio WCF, el cdigo sera el siguiente:
using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Web.UI; System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page { ServicioWCF.MetodosClient proxy = new ServicioWCF.MetodosClient(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { gvClientes.DataSource = proxy.ObtenerClientes(); gvClientes.DataBind(); var consulta = (from cl in proxy.ObtenerClientes() select cl.Localizacion).Distinct(); ddLocalizacion.DataSource = consulta.ToList(); ddLocalizacion.DataBind(); } } protected void ddLocalizacion_SelectedIndexChanged(object sender, EventArgs e) { gvClientes.DataSource = proxy.ObtenerClientesPorLocalizacion(ddLocalizacion.SelectedItem.Text); gvClientes.DataBind(); } }

Tecnologas Microsoft http://mredison.wordpress.com Paso 9: Compilar y ejecutar la aplicacin.

Este documento ha sido elaborado por Edison Daniel Garca Chias para el blog de Tecnologas Microsoft para distribucin gratuita. http://mredison.wordpress.com Comentarios, sugerencias y mejoras a edison@iedusoft.com Comparte este documento con un amigo

También podría gustarte