J'ai deux bases de données distinctes auxquelles je me connecte en utilisant linq et EF6. Je cours également certaines procédures stockées. Pour des raisons de vitesse, j'utilise l'ancienne école de l'exécution de ces utilisant la méthode suivante:Délai d'appel de la procédure stockée via SqlConnection
public static DataSet ExecuteStoredProcedure(object db, string storedProcedureName, IEnumerable<SqlParameter> parameters)
{
string connectionString="";
if (db is AriaEntities)
{
connectionString = ((AriaEntities)db).Database.Connection.ConnectionString;
}
else if (db is AMSEntities)
{
connectionString = ((AMSEntities)db).Database.Connection.ConnectionString;
}
var ds = new DataSet();
using (var conn = new SqlConnection(connectionString))
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = storedProcedureName;
cmd.CommandType = CommandType.StoredProcedure;
foreach (var parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
using (var adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(ds);
}
}
conn.Close();
}
return ds;
}
Je passe à la connexion de base de données que je suis actuellement à l'aide. Le problème que j'ai, c'est que lorsque j'essaie d'exécuter une procédure stockée sur le contexte DB AMSEntities, je reçois un délai d'attente, même si la procédure elle-même ne prend qu'une seconde à s'exécuter manuellement dans SQL Server. J'ai des permissions d'exécution sur la procédure stockée et je peux accéder aux tables dans le datacontext sans problème en utilisant linq.
Pourquoi le message de dépassement de délai se produit-il?
Rob
Je suppose que c'est un problème de réseau. Votre instance SQL Server est-elle sur une machine différente de votre application? Et la procédure stockée renvoie-t-elle une grande quantité de données? –
La connexion utilisée par EF est-elle ouverte et une transaction est-elle ouverte? Cela ressemble à un interblocage distribué entre les deux connexions, – usr
J'ai examiné de plus près la procédure stockée et trouvé qu'il y avait une requête à travers un serveur lié. J'ai supprimé ce bit et la requête n'était plus lente ... –