Compartir vía


Solución de problemas

La siguiente información expone algunos problemas que pueden surgir en las aplicaciones LINQ to SQL y proporciona sugerencias para evitar o reducir de otro modo el efecto de estos problemas.

Los problemas adicionales se tratan en Las preguntas más frecuentes.

Operadores de consulta estándar no admitidos

LINQ to SQL no admite todos los métodos de operador de consulta estándar (por ejemplo, ElementAt). Como resultado, los proyectos que se compilan pueden producir errores en tiempo de ejecución. Para obtener más información, consulte Traducción de operadores de consulta estándar.

Problemas de memoria

Si una consulta implica una colección en memoria y LINQ to SQL Table<TEntity>, la consulta se puede ejecutar en memoria, en función del orden en que se especifican las dos colecciones. Si la consulta debe ejecutarse en memoria, los datos de la tabla de base de datos deberán recuperarse.

Este enfoque es ineficaz y podría dar lugar a un uso significativo de memoria y procesador. Intente evitar estas consultas de varios dominios.

Nombres de archivos y SQLMetal

Para especificar un nombre de archivo de entrada, agregue el nombre a la línea de comandos como archivo de entrada. No se admite la inclusión del nombre de archivo en la cadena de conexión (con la opción /conn ). Para obtener más información, consulte SqlMetal.exe (Herramienta de generación de código).

Proyectos de biblioteca de clases

El Diseñador relacional de objetos crea una cadena de conexión en el app.config archivo del proyecto. En los proyectos de biblioteca de clases, no se usa el app.config archivo . LINQ to SQL usa la cadena de conexión proporcionada en los archivos en tiempo de diseño. Cambiar el valor de app.config no cambia la base de datos a la que se conecta la aplicación.

Eliminación automática en cascada

LINQ to SQL no admite ni reconoce operaciones de eliminación en cascada. Si desea eliminar una fila de una tabla que tenga restricciones en ella, debe realizar una de las siguientes acciones:

  • Establezca la ON DELETE CASCADE regla en la restricción de clave externa de la base de datos.

  • Use su propio código para eliminar primero los objetos secundarios que impiden que se elimine el objeto primario.

En caso contrario, se producirá una excepción SqlException.

Para obtener más información, vea Cómo: Eliminar filas de la base de datos.

Expresión no consultable

Si obtiene el error "La expresión '[expresión]' no es interrogable; ¿le falta una referencia de ensamblado?", verifique lo siguiente:

  • La aplicación tiene como destino .NET Compact Framework 3.5.

  • Tiene una referencia a System.Core.dll y System.Data.Linq.dll.

  • Tiene una directiva Imports de Visual Basic o using de C# para System.Linq y System.Data.Linq.

DuplicateKeyException

Durante la depuración de un proyecto LINQ to SQL, puede examinar las relaciones de una entidad. Al hacerlo, estos elementos se introducen en la memoria caché y LINQ to SQL se da cuenta de su presencia. Si a continuación intenta ejecutar un método similar a Attach o InsertOnSubmit, que genera varias filas que tienen la misma clave, se produce una DuplicateKeyException excepción.

Excepciones de concatenación de cadenas

La concatenación de operandos que se asignan a [n]text y otros [n][var]char no está admitida. Se lanza una excepción al concatenar cadenas asignadas a dos conjuntos de tipos diferentes. Para obtener más información, vea System.String Methods.

Omitir y tomar excepciones en SQL Server 2000

Debe usar miembros de identidad (IsPrimaryKey) al usar Take o Skip en una base de datos de SQL Server 2000. La consulta debe referirse a una sola tabla (es decir, no una combinación) o ser una operación Distinct, Except, Intersect o Union, y no debe incluir una operación Concat. Para obtener más información, vea la sección "Compatibilidad con SQL Server 2000" en Traducción de operadores de consulta estándar.

Este requisito no se aplica a SQL Server 2005.

GroupBy InvalidOperationException

Esta excepción se lanza cuando un valor de columna es NULL en una consulta GroupBy que agrupa por la expresión boolean, como group x by (Phone==@phone). Dado que la expresión es , booleanla clave se deduce como boolean, no nullableboolean. Cuando la comparación traducida genera un valor NULL, se intenta asignar un objeto nullableboolean a boolean, y se produce la excepción.

Para evitar esta situación (suponiendo que desea tratar los valores nulos como falso), use un enfoque como el siguiente:

GroupBy="(Phone != null) && (Phone=@Phone)"

Método parcial OnCreated()

Se llama al método OnCreated() generado cada vez que se llama al constructor de objetos, incluido el escenario en el que LINQ to SQL llama al constructor para realizar una copia de los valores originales. Tenga en cuenta este comportamiento si implementa el OnCreated() método en su propia clase parcial.

Consulte también