ASP.NET y Neo4jClient: ¿dónde almacenar la conexión?
El C # Neo4JClient tieneGraphClient
donde tienes que llamar.Connect()
var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
En todos los ejemplos que he visto, está en una aplicación de consola, por lo que declaranGraphClient
enMain()
y reutilizarlo. Y la documentación menciona cómo es seguro para subprocesos y para tener solo una instancia por base de datos y no llamar.Connect()
varias veces.
Pero, ¿qué pasa con las aplicaciones ASP.NET? ¿Debo pegarlo en alguna clase estática a la que acceden las páginas (o almacenarlo en el estado de la Aplicación)? Me gusta esto:
public class DbConnection
{
private static GraphClient _client;
public static GraphClient GraphClient
{
get
{
if (_client == null)
{
_client = new GraphClient(new Uri("http://localhost:7474/db/data"));
_client.Connect();
}
return _client;
}
}
}
Y luego en cualquier página ASPX podría simplemente:
protected void Page_Load(object sender, EventArgs e)
{
GraphClient client = DbConnection.GraphClient;
//do whatever I need to with client
}
¿O no lo estoy entendiendo correctamente y eso causaría todo tipo de problemas? ¿Necesito llamar?.Connect()
en cada método (o tal vez una vez por ciclo de vida de la página), así:
private GraphClient _client;
private GraphClient PageGraphClient
{
get { //same as in previous, check if null and load _client with the connection }
}
protected void Page_Load(object sender, EventArgs e)
{
//do whatever I need to with PageGraphClient
}
protected void btnSave_Click(object sender, EventArgs e)
{
//do whatever I need to with PageGraphClient
}
¿Y así? Supongo que me estoy quedando colgado de todo lo relacionado con Thread Safe y "estoy haciendo demasiadas conexiones a la base de datos" y quiero asegurarme de que no me estoy perdiendo una manera fácil / correcta de hacer esto.
(y sí, sé que no debería llamar directamente a los comandos de la base de datos desde las páginas ASPX, estoy simplificando demasiado para entender cómo funciona la clase GraphClient;)