web-dev-qa-db-fra.com

Erreur intermittente avec EF Core: la connexion ne prend pas en charge MultipleActiveResultSets.

J'ai une application ASP.Net Core qui utilise EF Core.

J'utilise ASP.Net Identity et partage le même DBContext pour les entités de mon application.

J'ai défini ma chaîne de connexion sur une base de données SQL Azure de manière à ce que MultipleActiveResultSet = True soit défini.

Cela fonctionne pendant un jour ou deux, mais finalement il échoue avec l'erreur suivante:

La connexion ne prend pas en charge MultipleActiveResultSets.

Je ne pense pas que MARS soit le vrai problème car il a fonctionné les deux premiers jours.

J'utilise le DI intégré d'ASP.Net Core pour définir mon DbContext. 

services.AddDbContext<AppDbContext>(options =>
  options.UseSqlServer(appDbContextConnectionString));

Si j'ai bien compris, la durée de vie par défaut du DbContext ci-dessus est de type transitoire (par requête Web).

Est-il possible de partager le même DBContext avec ASP.Net Identity ou dois-je en avoir un distinct pour les entités de mon application, pointé vers le même DB?

Je ne sais pas s'il s'agit d'un problème avec EF Core, ASP.Net Core ou avec la configuration SQL Azure.

12
Jonas Arcangel

MultipleActiveResultSets = True doit ajouter une chaîne de connexion.

string connectionString = "Source de données = MSSQL1; Catalogue initial = AdventureWorks; Sécurité intégrée = SSPI; MultipleActiveResultSets = True"; 

1
Sumit Ganguly

Supprimez le paramètre "Délai de connexion" de votre chaîne de connexion.

0
Adi Bilauca

J'ai continué à me heurter à ce problème aussi, et définir MultipleActiveResultSet=True dans la chaîne de connexion ne faisait pas grand chose. 

Ma configuration de base de données dans Startup.cs est très similaire à ce que vous avez:

 services.AddEntityFrameworkSqlServer()
         .AddDbContext<MyDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
            builder => builder.MigrationsAssembly("MyProject")),
            ServiceLifetime.Transient
         );

Il s'est avéré que je devenais

La connexion ne supporte pas MultipleActiveResultSets

parce que j'ai eu plusieurs requêtes de base de données async accédant aux mêmes entités. Ainsi, une requête de base de données extrairait une entité et une seconde aurait inclus la même entité via la nouvelle méthode Includede EF Core. Voir aussi https://stackoverflow.com/a/46164203/4336725

J'ai eu plusieurs requêtes de base de données async parce que EF Core ne prend actuellement pas en charge le chargement différé (contrairement à EF 6). https://github.com/aspnet/EntityFrameworkCore/issues/3797

Ma solution de contournement consistait à définir plusieurs IQueryablename__s avec différents Include() et ThenInclude() explicites. 

0
June Lau

J'avais un problème similaire et j'ai constaté que le problème était que j'ai raté une déclaration d'attente devant ma méthode.

FetchStuffFromDBAsync();

Est devenu:

await FetchStuffFromDBAsync();

Et le problème avait disparu.

0
MattBH