ASP.NET e Neo4jClient - onde armazenar a conexão?
O C # Neo4JClient possuiGraphClient
onde você tem que ligar.Connect()
var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
client.Connect();
Em todos os exemplos que eu vi, ele está em um aplicativo de console, então eles declaramGraphClient
noMain()
e reutilize-o. E a documentação menciona como seu Thread Safe e ter apenas uma instância por banco de dados e não chamar.Connect()
várias vezes.
Mas e nos aplicativos ASP.NET? Devo colocá-lo em alguma classe estática que é acessada pelas páginas (ou armazená-lo no estado Aplicativo)? Como isso:
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;
}
}
}
E então, em qualquer página ASPX, eu poderia simplesmente:
protected void Page_Load(object sender, EventArgs e)
{
GraphClient client = DbConnection.GraphClient;
//do whatever I need to with client
}
Ou não estou entendendo isso corretamente e isso causaria todos os tipos de problemas? Preciso ligar.Connect()
em cada método (ou talvez uma vez por ciclo de vida da página), assim:
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
}
E assim por diante? Eu acho que estou apenas desligando a coisa Segura do Thread e "fazendo muitas conexões com o db" e querendo ter certeza de que não estou perdendo uma maneira fácil / correta de fazer isso.
(e sim, eu sei que não deveria chamar os comandos do banco de dados diretamente das páginas ASPX, estou simplificando demais para entender como a classe GraphClient funciona;)