Estou recebendo tempos limite usando o Entity Framework (EF) ao usar uma função de importação que leva mais de 30 segundos para ser concluída. Tentei o seguinte e não consegui resolver esse problema:
Eu adicionei Default Command Timeout=300000
para a seqüência de conexão no App.Config arquivo no projeto que tem o arquivo EDMX como sugerido aqui .
É assim que minha cadeia de conexão se parece:
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
Tentei definir o CommandTimeout no meu repositório diretamente da seguinte maneira:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
O que mais posso fazer para que o EF atinja o tempo limite? Isso acontece apenas para conjuntos de dados muito grandes. Tudo funciona bem com pequenos conjuntos de dados.
Aqui está um dos erros que estou recebendo:
System.Data.EntityCommandExecutionException: ocorreu um erro ao executar a definição de comando. Consulte a exceção interna para obter detalhes. ---> System.Data.SqlClient.SqlException: tempo limite expirado. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo.
OK - Eu consegui isso e é bobagem o que aconteceu. Eu tinha a string de conexão com Default Command Timeout=300000
e o CommandTimeout definido como 180. Quando removi a Default Command Timeout
string de conexão, ela funcionou. Portanto, a resposta é definir manualmente o CommandTimeout no seu repositório no seu objeto de contexto da seguinte maneira:
this.context.CommandTimeout = 180;
Aparentemente, definir as configurações de tempo limite na cadeia de conexão não tem efeito sobre ela.
"
na string.NONCLUSTERED
índices a algumas das tabelas, isso resolveu o problema de tempo limite para nós.Respostas:
Há um erro conhecido ao especificar o tempo limite do comando padrão na cadeia de conexão EF.
http://bugs.mysql.com/bug.php?id=56806
Remova o valor da cadeia de conexão e defina-o no próprio objeto de contexto de dados. Isso funcionará se você remover o valor conflitante da cadeia de conexão.
Entity Framework Core 1.0:
Estrutura de Entidades 6:
Estrutura de Entidades 5:
Estrutura de entidade 4 e abaixo:
fonte
this.Database.SetCommandTimeout(180);
Se você estiver usando um DbContext, use o seguinte construtor para definir o tempo limite do comando:
fonte
DbContext
classe derivada foi gerada automaticamente a partir de umedmx
arquivo?Se você estiver usando o
DbContext
EF v6 +, como alternativa, você pode usar:fonte
Normalmente, eu manuseio minhas operações dentro de uma transação . Como experimentei, não é suficiente definir o tempo limite do comando de contexto, mas a transação precisa de um construtor com um parâmetro de tempo limite. Eu tive que definir os dois valores de tempo limite para que funcionasse corretamente.
No final da função, retornei o comando timeout ao valor anterior em prevto.
Usando EF6
fonte
Eu sei que este é um thread muito antigo em execução, mas ainda assim a EF não corrigiu isso. Para pessoas que usam a geração automática,
DbContext
use o código a seguir para definir o tempo limite manualmente.fonte
Se você estiver usando o Entity Framework como eu, defina Tempo limite na classe Startup da seguinte maneira:
fonte
É isso que eu financio. Talvez ajude alguém:
Aqui vamos nos:
Se você usar o LINQ com EF, procurando por alguns elementos exatos contidos na lista como este:
tudo está indo bem até que o IdList contenha mais de um ID.
O problema de "tempo limite" será exibido se a lista contiver apenas um ID. Para resolver o problema, use a condição if para verificar o número de IDs na IdList.
Exemplo:
Explicação:
Simplesmente tente usar o Sql Profiler e verifique a instrução Select gerada pelo Entity frameeork. ...
fonte