web-dev-qa-db-fra.com

Comment définir le délai d'expiration de la commande dans aspnetcore/entityframeworkcore

L'emplacement où le délai d'expiration de la commande est défini n'est plus le même que celui des versions précédentes.

Cependant, je ne trouve aucun endroit qui indique comment changer cela.

Ce que je fais, c'est télécharger de très gros fichiers, ce qui prend plus de temps que les 30 secondes par défaut à sauvegarder.

Notez que je pose des questions sur le délai d'expiration de la commande, et non sur le délai d'expiration de la migration, comme dans une autre question.

13
Greg Gum

Si vous utilisez le conteneur DI pour gérer le DbContext (c'est-à-dire que vous ajoutez le DbContext à la collection de services), le délai d'expiration de la commande peut être spécifié dans les options.

Dans Startup.ConfigureServices:

services.AddDbContext<YourDbContext>(options => options.UseSqlServer(
    this.Configuration.GetConnectionString("YourConnectionString"),
    sqlServerOptions => sqlServerOptions.CommandTimeout(60))
);
25
Carl

vous pouvez le changer à travers votre contexte

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
    {
        Database.SetCommandTimeout(150000);
    }
}
13
The Integrator

La meilleure option consiste à utiliser CommandTimeout lors de la configuration de votre contexte comme:

public class DbConnect: IConnnectDb
{
    private dbentitient _context;

    // inject this to a db entity from constructor. 

    //inside each method now use the follow before u actually run the query to db.  

    _context.Database.SetCommandTimeout(400);
}     

Remarque: EF Core n’exécutera la requête qu’en moins de 100 secondes. Si c'est plus que cela, il répète sans cesse et vous ne voyez jamais le résultat.

C’est mon expérience actuelle, alors laissez-moi savoir si vous êtes en mesure de le réparer EF Core 1.0 expire encore plus rapidement que EF Core 2.0.

0
venkat