3ENGINE  programmer :-)

martes 3 de marzo de 2009

LINQ con WCF: de carga diferida a explícita

LINQ por defecto utiliza la consulta diferida. Cuando "navegamos" entre las clases de un LINQ to SQL (.dbml) éste en background va generando las consultas y de este modo nos ahorramos consultas inutiles.

El problema viene cuando queramos devolver una clase que forma parte de un .dbml como resultado de un método marcado como [OperationContract].

Es necesario modificar el comportamiento por defecto de consulta diferida a una consulta forzada. Ejemplo:


PluginInstanceDataContext pluginsContext = new PluginInstanceDataContext();

var orderloadOption = new System.Data.Linq.DataLoadOptions();
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith(p => p.PluginParametro);
dlo.LoadWith(p => p.PluginTipoControl);
pluginsContext.LoadOptions = dlo;

var consulta = from plugins in pluginsContext.Plugin
where plugins.IdCentro == idCentro
select plugins;


Sino lo hacemos así nos encontraremos que las "clases hijas" no contienen datos.

Etiquetas: , , ,




miércoles 25 de febrero de 2009

Cómo habilitar .dbml de LINQ para WCF

Vale, de acuerdo es una ""tonteria"" pero una tonteria que me ha hecho perder unas cuantas horas. Si utilizas LINQ y requieres que un método WCF marcado con atributo [OperationContract] devuelva una clase de un fichero .dbml necesitas que se serialize correctamente para viajar al cliente correctamente, para ello necesitas poner Serialization mode = unidirectional


Etiquetas: , ,




   

Categorias

Archivos

 
Feed Blog suscríbete!      Contacto     Terminos & Condiciones © 3ENGINE 2007