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: .NET, LINQ, programacion, 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: .NET, programacion, WCF