utilizando linq con wcf

12
Tecnologías Microsoft http://mredison.wordpress.com CREATE TABLE CLIENTES ( ID INT IDENTITY(1,1)NOT NULL, NOMBRE VARCHAR(50), LOCALIZACION VARCHAR(50), PRIMARY KEY(ID) ); 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 dentro de Visual Studio 2010. WCF – WCF Service Application Paso 2: Crear una tabla como la siguiente desde SQL Server 2008. (Este tutorial se basará en esta tabla de ejemplo):

Upload: rudolphep

Post on 29-Nov-2014

566 views

Category:

Documents


2 download

TRANSCRIPT

Tecnologías Microsoft http://mredison.wordpress.com

CREATE TABLE CLIENTES ( ID INT IDENTITY(1,1)NOT NULL, NOMBRE VARCHAR(50), LOCALIZACION VARCHAR(50), PRIMARY KEY(ID) );

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 dentro de Visual Studio 2010. WCF – WCF Service Application

Paso 2:

Crear una tabla como la siguiente desde SQL Server 2008. (Este tutorial se basará en esta tabla

de ejemplo):

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Data.Linq.Mapping; namespace WCFLinq { [Table] public class Clientes { } }

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

Paso 3:

Importar la librería en la clase. System.Data.Linq.Mapping

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 diseñador 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 especificándola dentro de la clase, por ejemplo: Si usted

tiene una tabla llamada Clientes, puede crear una clase llamada Clientes de la siguiente

manera:

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Data.Linq.Mapping; namespace WCFLinq { [Table(Name="Clientes")] public class Cliente { } }

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; } } }

O crear una clase con otro nombre, siempre y cuando se especifique el nombre real de la tabla,

de la siguiente forma:

Paso 4:

Tiene que especificar las columnas de la tabla como propiedades dentro de la clase, si la

columna es o si es de tipo también se debe de especificar, de la PRIMARY KEY IDENTITY

siguiente manera:

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Configuration; namespace WCFLinq { public class Configuracion { public static string CadenaConexion { get { return ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString.ToString(); } } } }

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

Paso 5:

Ya creada la clase Clientes, cree otra clase llamada , el cual tendrá una Configuracion.cs

propiedad que regresará la cadena de conexión, de la siguiente manera:

Debe agregar la referencia a su proyecto System.Configuration

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

Tecnologías Microsoft http://mredison.wordpress.com

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) { } } }

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; } }

Paso 7:

Se crea un constructor dentro de la clase, el cual recibe como parámetro la Conexión o la

Cadena de Conexión.

Paso 8:

Debe crear propiedades de tipo Table:

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; namespace WCFLinq { [ServiceContract] public interface IMetodos { [OperationContract] List<Cliente> ObtenerClientes(); [OperationContract] List<Cliente> ObtenerClientesPorLocalizacion(string localizacion); } }

El esquema de clases sería el siguiente:

Paso 9:

Defina una interfaz con los siguientes métodos, esta interfaz se implementará en el servicio

web.

Referencia WCF en MSDN: http://msdn.microsoft.com/en-us/library/aa480190.aspx

Paso 10:

Implementar la interfaz en la clase del servicio web. (En este tutorial se ha cambiado de

nombre a la clase Service1)

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using 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(); } } }

<connectionStrings> <add name="CadenaConexion" connectionString="Data Source=.\MSPDEVELOPER;Initial Catalog=CURSO;Integrated Security=true;"/> </connectionStrings>

La clase Servicio implementa la interfaz , se crea un objeto de tipo DataContext y IMetodos

después se realizarán las consultas ocupando LINQ.

Paso 11:

Debe agregar una cadena de conexión dentro del de la siguiente forma: web.config

Paso 12:

Compilar y construir la solución.

Tecnologías Microsoft http://mredison.wordpress.com

ASP.NET Website

Paso 1: Agregue un nuevo sitio web a la solución:

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

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using 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(); } }

Paso 3: Especifique la URL del servicio, en este caso el servicio debe implementar la interfaz

anteriormente creada con los métodos.

Paso 4: Dentro del proyecto ASP.NET, agregue un llamado y desde el GridView gvClientes

evento llamará el servicio mediante el método implementado. Page_Load

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using 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(); } }

Paso 5: Compilar y ejecutar la aplicación.

Paso 6: Usted puede realizar consultas sobre consultas con LINQ de manera muy fácil y

dinámica. Por ejemplo existe un método llamado que regresa toda la ObtenerClientes()

información de los clientes, id, nombre y localización. 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:

Tecnologías Microsoft http://mredison.wordpress.com

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using 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(); } }

Paso 7: Compilar y ejecutar la aplicación.

Paso 8: Se debe vincular el resultado de acuerdo a la Localización seleccionada, se debe

realizar un AutoPostBack en el DropDownList y pasar como parámetro el nombre de la

localización al método ObtenerClientesPorLocalizacion(string localizacion) definido en la

interfaz del servicio WCF, el código sería el siguiente:

Tecnologías Microsoft http://mredison.wordpress.com

Paso 9: Compilar y ejecutar la aplicación.

Este documento ha sido elaborado por para el blog de Edison Daniel García Chiñas

Tecnologías Microsoft para distribución gratuita.

http://mredison.wordpress.com

Comentarios, sugerencias y mejoras a [email protected]

Comparte este documento con un amigo