JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

No me aparece el DataContext en un LinqDataSource

Linq to SQL es una tecnología precursora del actual Entity Framework que fue pionera en sacar partido a Linq para crear un ORM fácil de utilizar con esta tecnología. Su principal limitación es que solo funciona con SQL Server y que los "mapeos" deben ser 1 a 1 con las tablas (una tabla = 1 clase). Sin embargo es tremendamente fácil de usar y tiene un diseñador visual muy efectivo, por lo que a mucha gente (incluyéndome yo mismo) nos gusta mucho y es válido para la mayor parte de las situaciones si trabajas con el gestor de datos de Microsoft.

En ASP.NET Web Forms (otra tecnología ahora en retroceso pero tremendamente efectiva para ciertos tipos de aplicaciones Web, como por ejemplo las orientadas a gestión) se incluye un control para acceso visual a datos llamado LinqDataSource que está especialmente diseñado para trabajar con esta tecnología. Este control combinado con los diferentes controles enlazados a datos (y especialmente los ListView y DataPager) permite crear interfaces web orientadas a datos de manera visual, efectiva y rápida.

Sin embargo en algunas versiones de Visual Studio, por ejemplo la 2015, existen algunos problemillas debido a la forma en la que está configurado el entorno por defecto.

Haz la siguiente prueba: abre Visual Studio 2015, crea un nuevo proyecto web vacío de tipo de ASP.NET Web Forms:

Proyecto-Nuevo-WebForms-VS2015

Ahora añade una nueva clase de tipo Linq2SQL. Enlázala, por ejemplo, a la base de datos Northwind para poder hacer una prueba, y arrastra algunas tablas sobre el diseñador.

Ahora, en una nueva página .aspx vacía arrastra un control Linq2SQL. Al ir a configurarlo verás que la lista desplegable de los DataContext ¡está vacía!:

LinqDataSource_Vacio

Es decir, no se ha reconocido la clase de contexto de datos que tenemos en el archivo Linq2SQL. ¿Cómo es posible si todo el objeto de ese control es, precisamente, reconocer este tipo de contextos de datos?

El problema es que el proyecto de Web Forms, por defecto, no incluye ninguna referencia a la biblioteca de Linq y por eso no reconoce el DataContext, lo cual es una cosa extraña.

La solución es sencilla: hay que añadir al web.config de nuestra solución la siguiente referencia directamente en la sección de "assemblies":

<compilation debug="true" targetFramework="4.5.2">
       <assemblies>
         <add assembly="System.Data.Linq, Version=4.0.30319.17929, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       </assemblies>
</compilation>

De este modo el proyecto logrará encontrar los DataContext y podremos seleccionar sin problema nuestra clase Linq2SQL:

LinqDataSource_OK

Problema solucionado.

¡Espero que te sea útil!

José Manuel Alarcón José Manuel Alarcón
Fundador y director de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Agregar comentario