Pergunta

Eu construído um banco de dados MySQL e eu estou tentando mapeá-la para fora com Entity Framework, mas eu começar a correr em "GenerateSSDLException" é sempre que eu tento adicionar mais do que cerca de 20 mesas para o contexto EF.

Uma exceção do tipo 'Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException' ocorreu durante a tentativa de atualização do banco de dados. A exceção mensagem é: 'Ocorreu um erro ao executar a definição de comando. Vejo a exceção interna para obter detalhes. '

Erro fatal encontrado durante a execução do comando.

Tempo limite expirou. O tempo limite esgotou antes da conclusão da operação ou o servidor não está respondendo.

Não há nada de especial sobre as tabelas afetadas, e nunca é a mesma tabela (s), só que depois de um certo número (inespecíficos) de tabelas foram adicionadas, o contexto não pode mais ser atualizados sem o "Tempo limite expirou" erro. Às vezes é apenas uma tabela de sobra, e às vezes é três; resultados são bastante imprevisíveis. Além disso, a variação no número de tabelas que podem ser adicionados antes do erro indica-me que talvez as mentiras problema no tamanho da consulta que está sendo gerado para atualizar o contexto que inclui tanto as definições de tabela existentes e também as novas tabelas que estão a ser adicionada a ele. Essencialmente, a consulta SQL está ficando muito grande e ele está deixando de executar por algum motivo.

Se eu gerar o modelo com EdmGen2 ele funciona sem erros, mas o arquivo EDMX gerado não pode ser atualizado dentro do Visual Studio sem produzir a exceção mencionada.

Em toda a probabilidade a fonte desta mentiras problema na ferramenta dentro do Visual Studio dado que EdmGen2 funciona bem, mas eu estou esperando que talvez outros poderiam oferecer alguns conselhos sobre como abordar esta questão muito original, porque parece que < a href = "http://forums.mysql.com/read.php?38,285936,285936" rel = "noreferrer"> Eu não sou a única pessoa que o experimenta .

Uma sugestão de um colega ofereceu mantinha dois arquivos EBMX separados com algum cruzamento mesa, mas que parece ser uma solução muito feio na minha opinião. Acho que isso é o que eu ganho por tentar usar "nova tecnologia". : (

Foi útil?

Solução

Eu só tinha dor de cabeça sobre este problema em toda a tarde. No entanto, eu encontrei a solução que você pode simplesmente adicionar uma declaração no app.config ou web.config onde existe a sua ligação desinger EF como 'default Comando Timeout = 300000;'. O problema foi.

Outras dicas

O conselho acima não é correta.

Default Command Timeout é o único parâmetro seqüência de conexão que você precisa mudar. Connect Time apenas regula a quantidade de tempo de espera para obter uma conexão em primeiro lugar; que não é o seu problema.

Default Command Timeout parece ter nenhum efeito na cadeia de conexão com o Connector / Net 6.3.4. Acho que este é um bug no Connector / Net, e eu entrou com uma href="http://bugs.mysql.com/bug.php?id=56806" rel="nofollow noreferrer"> relatório com a Oracle. EDIT: Este erro foi reconhecido pelos desenvolvedores do MySQL e foi corrigido a partir de 10/13/2010. Correções foram colocados em 6.0.8, 6.1.6, 6.2.5 e 6.3.5.

A única maneira que eu tenho em torno deste foi para alterar a propriedade ObjectContext do meu objeto CommandTimeout para algo diferente de null. Se for nulo, ele deveria usar o valor no "fornecedor subjacente" per MSDN. Se não for nulo, ele é o valor autorizado para o número de segundos antes de um tempo limite.

Por exemplo:

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

Confira:

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

Opa, só percebi que esse link já foi publicado! desculpe

Também gostaria de considerar fortemente "Uma sugestão de um colega ofereceu mantinha dois arquivos EBMX separados com algum cruzamento tabela"

Pode ser feio, mas ele deve funcionar!

Vocês são fracos não explicar como resolver o problema facilmente:

  1. Excluir todas as suas conexões de dados
  2. Faça o download do mais recente MySql Connector (6.3.x)
  3. Abra o Visual Studio> Sever Explorador> Right Click "Conexões de dados"> Adicionar Conexão
  4. Escolha provedor de banco de dados MySQL
  5. Digite os detalhes de conexão
  6. Clique em "Avançar"
  7. Encontre Ligação Time out e torná-lo algo como 30.000
  8. Encontre padrão Comando Timeout e torná-lo algo como 30.000

Salvar tudo e, em seguida, tentar atualizar seu modelo EF novamente. Eu testei isso com EF 4.0 e VS2010 assim que eu sei que funciona.

Eu tentei toda a solução acima sem sucesso. Eu baixei o conector .NET mais recente para o MySQL (6.3.6) eo problema desapareceu.

Tente dotConnect para MySQL com Entidade Developer .
Fizemos algumas melhorias no processo de geração de modelo em nossas ferramentas. Você pode adicionar o Modelo de Entidade Devart ao seu projeto, que é semelhante ao modelo ADO.NET Entity Framework, mas tem algumas melhorias e não tem o problema de tempo limite.

Duas possibilidades vêm à mente:

Em primeiro lugar é que ele é EF versão 1 (que acompanha .NET 3.5 SP 1). Consulte este e este .

A outra é que este se sente mais ou menos como os mesmos sintomas um tem com o SQL Server e pré-drivers ODBC (circa 1991), onde foi usado o tipo errado de chamada: um tipo é usado com consultas retornar resultados (select), e as outras declarações, não para retornar um resultado (create table). Eventualmente a ligação tornou-se irremediavelmente unsynchronized tentando igualar-se resultados SELECT para a consulta correspondente. (Naqueles dias, o Tela Azul da Morte não existe:. O computador tende a reiniciar voluntariamente vez)

Gostaria de saber se a ferramenta está confundindo o modo de conexão na variedade de operações realizadas: a criação de tabelas, verificando a estrutura criada, acrescentando uma nova coluna, preencher linhas, e verificar ou validar o conteúdo de linha depois de ser preenchido. Se esta é a causa, então ele pode ser evitado por ser "mais puro" sobre a sequência de operações: não fazer nada mas tabela completa cria um após o outro, isto é, não fazer nada que faria com que ele para criar uma tabela, em seguida, alter table para adicionar nova colunas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top