Я пытаюсь повторно использовать существующее соединение с базой данных, чтобы я мог выполнять несколько операций с базой данных с помощью TransactionScope
без вызова MSDTC.
Entity Framework (с использованием нового API DbContext
в выпуске 4.1), похоже, не хочет, чтобы явно открытое соединение оставалось открытым. Старый ObjectContext
API поддерживает соединение открытым, как ожидалось и задокументированы .
Поскольку API DbContext
просто использует ObjectContext
под капотом, я ожидал такого же поведения. Кто-нибудь знает, если это изменение предназначена или известная проблема? Я нигде не могу найти ее задокументированной.
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();
}
}
}