Linq para mapear Datasets a Entidades?... alternativas ágiles?

15/07/2008 - 23:10 por Ariel Larraburu | Informe spam
Buenas!. La pregunta es, suponiendo que tengo en una aplicacion en capas, en
la capa de acceso a datos, metodos que actualmente obtienen datasets de
procedimientos almacenados y convierten estos datarows a entidades de tipo
List<Tipo>, es decir, convierto:

Select Nombre, Apellido From Clientes

a:

public class Clientes:List<Cliente> {}

donde 'cliente' es:

public class Cliente
{
public string Nombre { get {...} set {...}}
public string Apellido { get {...} set {..}}
}

Estoy buscando el metodo mas eficiente y que me insuma el menor trabajo y la
menor cantidad de lineas de codigo posible, estoy intentando lograr esto con
linq to dataset, no lo logre aun, pero estimo que por ese lado está la
solucion. Todo esto suponiendo que los campos de la tabla y las propiedades
de la clase ya son de tipos compatibles y sus nombres son los mismos...

El siguiente código no funciona pero da una buena idea de lo que quiero
hacer. No estoy buscando que me resuelvan el problema, pero tampoco quiciera
reinventar la rueda:

//esta es una clase del tipo List<Product>
ENTeCommerce.Products entProducts = new
ENTeCommerce.Products();

var products = from p in ds.Tables[0].AsEnumerable() select p;
entProducts = products.ToList<ENTeCommerce.Products>();

Resultado: (error en la ultima linea) cannot convert from
'System.Data.EnumerableRowCollection<System.DataRow>' to
'System.Collections.Generic.IEnumerable.

Actualmente tengo una clase que usa reflection, algo asi como public static
MapEntity(DataSet dsSource, ref object entity), pero usar reflection no solo
no es, digamos muy prolijo, sino que genera un pequeño cuello de botella.

Se aceptan todo tipo de sugerencias.

Saludos.

Ariel Larraburu.

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
16/07/2008 - 12:12 | Informe spam
Hola Ariel,

On 15 jul, 23:10, "Ariel Larraburu"
wrote:
Buenas!. La pregunta es, suponiendo que tengo en una aplicacion en capas, en
la capa de acceso a datos, metodos que actualmente obtienen datasets de
procedimientos almacenados y convierten estos datarows a entidades de tipo
List<Tipo>, es decir, convierto:

Select Nombre, Apellido From Clientes

a:

public class Clientes:List<Cliente> {}

donde 'cliente' es:

public class Cliente
{
public string Nombre { get {...} set {...}}
public string Apellido { get {...} set {..}}

}

Estoy buscando el metodo mas eficiente y que me insuma el menor trabajo y la
menor cantidad de lineas de codigo posible, estoy intentando lograr esto con
linq to dataset, no lo logre aun, pero estimo que por ese lado está la
solucion. Todo esto suponiendo que los campos de la tabla y las propiedades
de la clase ya son de tipos compatibles y sus nombres son los mismos...




Con LinQ to SQL puedes eliminar todo el código de los datasets y de
las clases como Cliente por
que ya te devuelve directamente una lista con tipo a partir de una
consulta.


Saludos
Alfredo
Respuesta Responder a este mensaje
#2 Ariel Larraburu
16/07/2008 - 15:24 | Informe spam
El tema es que luego esa entidad la quiero exponer por medio de webservice
de una manera interoperable con clientes de diferentes teconologias.. No se
si no se me puede complicar por este lado, ademas ya tengo muy avanzada la
aplicacion como para eliminar la arquitectura basada en datahelpers...
prefiero avanzar de a poco y hacer una reingenieria en otra etapas.


"Alfredo Novoa" escribió en el mensaje de noticias
news:
Hola Ariel,

On 15 jul, 23:10, "Ariel Larraburu"
wrote:
Buenas!. La pregunta es, suponiendo que tengo en una aplicacion en capas,
en
la capa de acceso a datos, metodos que actualmente obtienen datasets de
procedimientos almacenados y convierten estos datarows a entidades de tipo
List<Tipo>, es decir, convierto:

Select Nombre, Apellido From Clientes

a:

public class Clientes:List<Cliente> {}

donde 'cliente' es:

public class Cliente
{
public string Nombre { get {...} set {...}}
public string Apellido { get {...} set {..}}

}

Estoy buscando el metodo mas eficiente y que me insuma el menor trabajo y
la
menor cantidad de lineas de codigo posible, estoy intentando lograr esto
con
linq to dataset, no lo logre aun, pero estimo que por ese lado está la
solucion. Todo esto suponiendo que los campos de la tabla y las
propiedades
de la clase ya son de tipos compatibles y sus nombres son los mismos...




Con LinQ to SQL puedes eliminar todo el código de los datasets y de
las clases como Cliente por
que ya te devuelve directamente una lista con tipo a partir de una
consulta.


Saludos
Alfredo
Respuesta Responder a este mensaje
#3 Alfredo Novoa
16/07/2008 - 15:39 | Informe spam
Hola Ariel,

El Wed, 16 Jul 2008 10:24:26 -0300, Ariel Larraburu escribió:

El tema es que luego esa entidad la quiero exponer por medio de webservice
de una manera interoperable con clientes de diferentes teconologias.. No se
si no se me puede complicar por este lado, ademas ya tengo muy avanzada la
aplicacion como para eliminar la arquitectura basada en datahelpers...
prefiero avanzar de a poco y hacer una reingenieria en otra etapas.



Entonces no creo que te merezca mucho la pena usar LinQ.


Saludos
Alfredo
Respuesta Responder a este mensaje
#4 Jose Alberto
16/07/2008 - 18:16 | Informe spam
Entonces no creo que te merezca mucho la pena usar LinQ.






Yo en realidad en general le veo pocas ventajas a este famoso Linq para Sql
y menos como alternativa agil.
Respuesta Responder a este mensaje
#5 Ariel Larraburu
16/07/2008 - 21:14 | Informe spam
Ya le encontre mas o menos la vuelta y me sirve bastante, imagino que es
mucho mas performante que hacer un foreach del dataset para volcarlo a una
entidad, ademas de que lleva bastante menos codigo, pero los datos los sigo
obteniendo usando un datahelper que ejecuta un sp.

Yo tampoco le veo mucho sentido ni ventajas a Linq to Sql, en cambio si a
Linq to object para volcar los resultado de los datos obtenidos de un SP a
las entidades.

Gracias.

"Jose Alberto" escribió en el mensaje de noticias
news:udvp%

Entonces no creo que te merezca mucho la pena usar LinQ.






Yo en realidad en general le veo pocas ventajas a este famoso Linq para
Sql y menos como alternativa agil.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida