DbContext ne conserve pas la connexion ouverte pour la réutilisation
J'essaie de réutiliser une connexion de base de données afin que je puisse faire de multiples opérations de base de données à l'aide d'un TransactionScope
sans invoquer MSDTC.
Cadre de l'entité (à l'aide de la nouvelle DbContext
API dans la version 4.1) ne semble pas vouloir garder une manière explicite-raccordement ouvert ouvert. L'ancien ObjectContext
API maintient ouverte comme prévu et documenté.
Depuis le DbContext
API utilise juste ObjectContext
sous le capot, j'aurais attendu le même comportement. Personne ne sait si ce changement a pour but ou un problème connu? Je ne le trouve pas documenté nulle part.
public void ConnectionRemainsOpen()
{
using (var context = new TestDataContext())
{
try
{
Assert.AreEqual(ConnectionState.Closed, context.Database.Connection.State);
context.Database.Connection.Open();
var firstRecord = context.Table3.FirstOrDefault();
//this Assert fails as State == ConnectionState.Closed
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
var newRecord = new Table3
{
Name = "test",
CreatedTime = DateTime.UtcNow,
ModifiedTime = DateTime.UtcNow
};
context.Table3.Add(newRecord);
context.SaveChanges();
//this Assert would also fail
Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State);
}
finally
{
if (context.Database.Connection.State == ConnectionState.Open)
context.Database.Connection.Close();
}
}
}
source d'informationauteur GWB
Vous devez vous connecter pour publier un commentaire.
Si vous voulez contrôler la connexion, vous devez le créer avant de contexte et de le transmettre contexte sinon, la connexion n'est pas sous votre contrôle. Essayez quelque chose comme: