DbContext не будет поддерживать соединение открытым для повторного использования

Я пытаюсь повторно использовать существующее соединение с базой данных, чтобы я мог выполнять несколько операций с базой данных с помощью 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();
        }
    }
}

13
задан abatishchev 13 October 2014 в 16:49
поделиться