Comment maintenir une connexion de firebase database dans une application ASP.NET MVC?

Je n’utilise pas les bits LINQ-to-SQL ou Entity Framework dans une application Web et utilise actuellement quelque chose comme ceci (il s’agit d’un projet de classe):

using System.Data; using System.Data.SqlClient; namespace StackOverflowClone.Models { public class Database { public static SqlConnection ActiveConnection { get; private set; } static Database() { ActiveConnection = new SqlConnection( "Data Source=********.database.windows.net;" + "Initial Catalog=EECS341;Uid=*****;Pwd=*******;" + "MultipleActiveResultSets=True;"); ActiveConnection.Open(); } } } 

Toutefois, cela semble provoquer des problèmes de threading car l’initialiseur statique s’exécute une fois par processus de serveur, plutôt qu’une fois par demande.

Est-ce que le framework fournit une méthode intégrée pour gérer cela ou devrais-je juste avoir une fonction qui crache toutes les connexions de firebase database à chaque fois?

ou devrais-je simplement avoir une fonction qui crache toutes les connexions de firebase database à chaque fois?

Oui, fais ça. Laissez le regroupement de connexions ADO.NET gérer les détails pour vous. Votre objective doit être de maintenir la connexion ouverte pendant une période aussi courte que possible.

Le regroupement de connexions réduit le nombre de fois que de nouvelles connexions doivent être ouvertes. Le pooler conserve la propriété de la connexion physique. Il gère les connexions en maintenant en vie un ensemble de connexions actives pour chaque configuration de connexion donnée. Chaque fois qu’un utilisateur appelle Open sur une connexion, le pooler recherche une connexion disponible dans le pool. Si une connexion en pool est disponible, il la renvoie à l’appelant au lieu d’ouvrir une nouvelle connexion. Lorsque l’application appelle Close sur la connexion, le pooler la renvoie à l’ensemble mis en pool de connexions actives au lieu de le fermer. Une fois la connexion renvoyée au pool, celui-ci est prêt à être réutilisé lors du prochain appel Open.

Créez donc une GetConnection() statique GetConnection() qui renvoie une nouvelle connexion ouverte. Utilisez-le dans une instruction using afin qu’il puisse être fermé et renvoyé au pool de connexions dès que possible.

 using(var cn = Database.GetConnection()) { //query your data here, Dapper example below cn.Execute("update MyTable set MyField = @newValue", new {newValue}); } 

Toujours créer de nouvelles connexions et les détruire avec using . Ils ne sont pas vraiment créés à partir de rien, ils sont récupérés à partir d’un pool de connexion . Il n’y a pas de pénalité de performance. En fait, c’est la meilleure façon de procéder.

Voir ma réponse concernant l’ using : https://stackoverflow.com/a/9811911/290343

Est-ce que le framework fournit une méthode intégrée pour gérer cela ou devrais-je juste avoir une fonction qui crache toutes les connexions de firebase database à chaque fois?

Les deux, en fait.

Le serveur Web étant multi-thread, chaque thread a donc besoin de sa propre connexion à la firebase database. Il suffit de créer un si nécessaire.

Les connexions réelles à la firebase database sont regroupées. Lorsque vous disposez d’un object de connexion, la connexion réelle n’est pas fermée, mais renvoyée au pool. Si vous créez un nouvel object de connexion avec la même chaîne de connexion, il ne fera que réutiliser une connexion du pool.