Estoy tratando de reutilizar una conexión de base de datos existente para que pueda hacer varias operaciones de base de datos utilizando un TransactionScope
sin invocar MSDTC.DbContext no mantendrá abierta la conexión para su reutilización
Entity Framework (utilizando la nueva API DbContext
en la versión 4.1) no parece querer mantener abierta una conexión explícitamente abierta. La antigua API ObjectContext
mantiene la conexión abierta como se esperaba y documented.
Dado que la API DbContext
solo usa ObjectContext
debajo del capó, esperaba el mismo comportamiento. ¿Alguien sabe si este cambio es intencionado o un problema conocido? No puedo encontrarlo documentado en ningún lado.
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();
}
}
}
Si coloca un Assert after Open() pero antes de la primera consulta, ¿cuál es el resultado? Me pregunto si el problema aquí es que devuelve un valor incorrecto en lugar de cerrar y reabrir las conexiones. – Tridus
@Tridus, el Assert que sugiere pasa con un resultado esperado de 'Abierto'. – GWB
Me doy cuenta de que esta es una publicación anterior, pero estaba leyendo el libro de Julia Lerman y la sintaxis que usa es context.Connection.Open() (es decir, no hay una base de datos entre el contexto y la conexión). Solo un pensamiento. – Tod