Marco de la entidad con MySQL - Tiempo de espera agotado mientras que la generación de modelos

StackOverflow https://stackoverflow.com/questions/1718739

  •  19-09-2019
  •  | 
  •  

Pregunta

Yo he construido una base de datos en MySQL y yo estoy tratando de hacer un mapa con Entity Framework, pero empiezan a correr en "s" GenerateSSDLException siempre que intente añadir más de unos 20 mesas en el contexto de EF.

  

una excepción de tipo   'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException'   ocurrido al intentar actualizar   de la base de datos. La excepción   mensaje es: 'Ha ocurrido un error mientras se   la ejecución de la definición del comando. Ver   la excepción interna para los detalles '.

     

Fatal error encontrado durante la ejecución del comando.

     

Tiempo de espera agotado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no está respondiendo.

No hay nada especial acerca de las tablas afectadas, y que nunca es la misma mesa (s), es sólo que después de haber sido añadido un cierto número (no específica) de las tablas, el contexto ya no puede ser actualizado sin el "tiempo de espera agotado" error. A veces es sólo una tabla de sobra, ya veces es tres; Los resultados son bastante impredecible. Por otra parte, la variación en el número de mesas que se pueden añadir antes del error me indica que tal vez el problema radica en el tamaño de la consulta que se genera para actualizar el contexto que incluye tanto las definiciones de las tablas existentes, así como las nuevas tablas que están siendo añadido a la misma. En esencia, la consulta SQL se está haciendo demasiado grande y está fallando a ejecutar por alguna razón.

Si genero el modelo con EdmGen2 funciona sin ningún error, pero el archivo generado EDMX no se puede actualizar dentro de Visual Studio sin producir la mencionada excepción.

Es muy probable que el origen de este problema radica en la herramienta dentro de Visual Studio dado que EdmGen2 funciona bien, pero estoy esperando que quizás otros podrían ofrecer algunos consejos sobre cómo abordar esta cuestión muy singular, ya que parece < a href = "http://forums.mysql.com/read.php?38,285936,285936" rel = "noreferrer"> no soy la única persona que lo experimenta .

Una sugerencia de un colega ofreció mantenía dos archivos separados EBMX con alguna tabla de cruce, pero que parece como una solución bastante feo en mi opinión. Supongo que esto es lo que me pasa por tratar de utilizar "nueva tecnología". : (

¿Fue útil?

Solución

Sólo tenía dolor de cabeza en este problema en toda la tarde. Sin embargo, he encontrado la solución que sólo puede agregar una declaración en app.config o web.config donde existe la conexión desinger EF como 'Comando de tiempo de espera predeterminado = 300000;'. El problema se ha ido.

Otros consejos

El consejo anterior no es correcta.

Default Command Timeout es el único parámetro de cadena de conexión que necesita cambiar. Connect Time simplemente regula la cantidad de tiempo que esperar para conseguir una conexión en el primer lugar; que no es su problema.

Default Command Timeout parece tener ningún efecto en la cadena de conexión con conector / Net 6.3.4. Creo que esto es un error en el Connector / Net y presenté una informe de error con Oracle. EDIT: Este error se reconoció por los desarrolladores de MySQL y se ha fijado a partir del 10/13/2010. Correcciones se pusieron en 6.0.8, 6.1.6, 6.2.5, 6.3.5 y.

La única manera que tengo alrededor de esta propiedad fue cambiar mi ObjectContext CommandTimeout del objeto a algo que no sea nulo. Si es nulo, se supone que debe utilizar el valor en el "proveedor subyacente" por MSDN. Si no es nulo, es el valor autorizada para el número de segundos antes de un tiempo de espera.

Por ejemplo:

var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;

Salida:

http: // efvote. wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/

Vaya, acabo de dar cuenta que este enlace ya fue publicada! Lo sentimos

También me gustaría considerar seriamente "Una sugerencia de un colega ofreció mantenía dos archivos separados EBMX con alguna tabla de cruce"

Puede ser feo, pero debería funcionar!

Ustedes son débiles no explica cómo solucionar el problema fácilmente:

  1. Eliminar todas las conexiones de datos
  2. Descargar la última MySQL Connector (6.3.x)
  3. Abra Visual Studio> Sever Explorador> Derecho Haga clic en "Conexiones de datos"> Agregar conexión
  4. Seleccione el proveedor de base de datos MySQL
  5. Introduce los detalles de conexión
  6. Haga clic en "Avance"
  7. Para Conectar Intervalo de tiempo y hacer que sea algo así como 30.000
  8. Encuentra defecto Tiempo de espera de comandos y que sea algo así como 30.000

Guardar todo y luego tratar de actualizar su modelo de EF de nuevo. He probado esto con EF 4.0 y VS2010 así que sé que funciona.

He intentado todo de la solución anterior fue en vano. He descargado la última conector .NET para MySQL (6.3.6) y el problema desapareció.

Trate dotConnect para MySQL con Entidad de desarrollo .
Hemos hecho algunas mejoras en el proceso de generación de modelos en nuestras herramientas. Puede añadir el modelo de entidad Devart a su proyecto, que es similar al modelo de ADO.NET Entity Framework, pero tiene algunas mejoras y no tiene el problema de tiempo de espera.

Dos posibilidades vienen a la mente:

En primer lugar es que es versión EF 1 (que se incluye con .NET 3.5 SP 1). Ver este y este .

La otra es que esto se siente más o menos como los mismos síntomas que uno tenía con los conductores pre-ODBC SQL Server y (alrededor de 1991), donde se utiliza el tipo incorrecto de llamada: un tipo se utiliza con consultas devolver resultados (select), y la otra para declaraciones a no devolver un resultado (create table). Con el tiempo se convirtió en la conexión irremediablemente no sincronizado tratando de hacer coincidir los resultados de SELECT para la consulta correspondiente. (En aquellos días, el Pantalla Azul de la Muerte no existía:. El equipo tendía a reiniciar de forma voluntaria en su lugar)

Me pregunto si la herramienta está confundiendo el modo de conexión en la variedad de operaciones que se realizan: la creación de tablas, la verificación de la estructura creada, añadiendo una nueva columna, poblando filas, y verificar o validar el contenido de fila después de ser llenado. Si esta es la causa, entonces podría ser evitado por ser "más puro" sobre la secuencia de operaciones: hacer nada más que la tabla completa crea una detrás de otra, es decir, no hacer nada que hacer que se cree una tabla a continuación alter table añadir nueva columnas.

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