Объем транзакции с пулом в Linq2Sql - PullRequest
1 голос
/ 10 ноября 2011

Если в строке подключения установлено значение true, следующий код работает нормально.Если его отключить не удастся с помощью: «MSDC недоступен».

Является ли просто удачей, что оба DataContext выбирают одно и то же соединение из пула при включенном пуле или существует какая-то координация, выполняемая TransactionScope?

using(var scope = new TransactionScope())
{
    using(var db = new DataContext(connectionString))
    {
        //Do stuff
    }
    using(var db = new DataContext(connectionString))
    {
        //Do stuff
    }
    scope.Complete();
}

В моем реальном коде в настоящее время я не могу передать конкретное соединение в DataContext, но использую строку соединения.Также я хотел бы по возможности избегать использования координатора распределенных транзакций.

1 Ответ

2 голосов
/ 10 ноября 2011

Вам повезло, потому что обе ваши строки подключения совпадают, поэтому вы получаете такое же соединение в пуле, когда пул включен. Однако результаты будут неопределенными, если имеется несколько одновременных обращений к соединениям с этой строкой соединения, поскольку во втором экземпляре DataContext вы не можете получить такое же соединение в пуле.

Если вам нужно создать два объекта DataContext в одной транзакции, вам нужно будет использовать DTC. Если вы не можете использовать DTC, вам нужно найти способ использовать только один объект DataContext в транзакции.

...