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:
1 2 3 4 5 6 7 8 9 10 11 | 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.