Pregunta

OK, he confirmado que solo tengo este problema cuando intento consultar la clave primaria si esa clave primaria de la entidad está configurada en 'Valor generado automáticamente', pero sin esto, ¿cómo puedo insertar? Lo siento si este es un novato linq2sql pero acabo de comenzar a trabajar con él.

¿Cómo se puede usar Linq to Sql con esta opción desactivada pero también hacer que db maneje los pk? Odiaría tener que preguntar cada vez para obtener el paquete que debo asignar ...

Espero que alguien pueda ayudarme, soy completamente incapaz de usar linq a sql en uno de mis proyectos, no estoy seguro de qué hacer ... aquí hay un ejemplo, esta línea arroja una excepción StackOverflow.

MyDataContext dc = new MyDataContext(ConnStr);
var obj = dc.MyDataTable.AsQueryable().SingleOrDefault(a => a.pkID == 4);

- Esa segunda línea arroja la excepción StackOverflow.

Aquí hay otro ejemplo usando el mismo datacontext

var o = dc.MyDataTable.Take(1); <-- works fine
var abc = o.ToArray();  <-- unable to evaluate, debugger stops

¿Alguna idea de lo que puedo probar? Parece que estoy bien usando linq to sql en otro proyecto en la misma solución.

- ACTUALIZACIÓN-- Olvidé mencionar que esta entidad particular 'MyDataTable' tiene el pk establecido como 'Valor generado automáticamente'; lo configuré para esto porque tengo sql haciendo incremento automático y esta es la columna de identidad.

¿Fue útil?

Solución

¿Cómo se implementa pkID? ¿Hay alguna posibilidad de que sea recursivo de alguna manera?

Otros consejos

El Take(1) funcionamiento no me sorprende, ya que esto realmente no ejecuta nada (se difiere hasta que se iteran los datos).

Ese es un problema interesante, entre otras cosas porque SingleOrDefault(x=>x.ID == id) en realidad tiene procesamiento diferente internamente: reconoce esto como una búsqueda de clave principal y comprueba el administrador de identidad primero .

EDIT Como algo fuera de lo común, intente .Where(x=>x.ID == id).SingleOrDefault() - según el error (enlace anterior), esto no usa el truco de búsqueda de identidad hasta que se envíe 4.0.

Comenzaría preguntándome:

  • ¿hay algo extraño en el identificador getter / setter (¿ha agregado código?)
    • ¿has hecho algo en una clase parcial para este tipo?
  • ¿es parte de una cadena de herencia?
    • y si es así, ¿has hecho un mono con una clase parcial para el tipo padre?
  • ¿obtienes algo en la ventana de la pila de llamadas cuando explota?

Eso fue un error corregido en LINQ 4.0

http: // damieng .com / blog / 2009/06/01 / linq-to-sql-changes-in-net-40

  

La estabilidad de la consulta Contiene ahora detecta IQueryable autorreferenciada y no causa un desbordamiento de la pila

En .NET 3.5 para resolver el problema: al usar 'Valor generado automáticamente' = Verdadero, debe establecer 'Retraso cargado' en Falso; de lo contrario, obtendrá el error de recurrencia.

¡Su tabla de datos es demasiado grande!

Editar. ¿MyDataTable es realmente una DataTable? ¿O es realmente una tabla LINQ to SQL & Lt; ... & Gt; ? Si es así, elimine AsQueryable ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top