Почему моя транзакция не переходит в DTC? - PullRequest
9 голосов
/ 06 мая 2011

DTC отключен на моей машине.Насколько я понимаю, этот код должен потерпеть неудачу, потому что он использует два контекста данных в одной транзакции.Итак, почему это работает?(Примечание: я пробовал это с использованием .NET 3.5 и .NET 4.0.)

using (TransactionScope transactionScope = new TransactionScope())
{
    UpdateEta();
    UpdateBin();

    transactionScope.Complete();
}

Вот методы DAL, которые вызываются:

public static void UpdateBin(Bin updatedBin)
{
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
    {
        BinRecord binRecord = (from bin in dataContext.BinRecords
                               where bin.BinID == updatedBin.BinId
                               select bin).FirstOrDefault();

        binRecord.BinID   = updatedBin.BinId;
        binRecord.BinName = updatedBin.BinName;

        dataContext.SubmitChanges();
    }
}  

public static void UpdateEta(Eta updatedEta)
{
    using (DevProdDataDataContext dataContext = new DevProdDataDataContext(ConnectionString))
    {
        EtaRecord etaRecord = (from eta in dataContext.EtaRecords
                               where eta.ID == updatedEta.ID
                               select eta).FirstOrDefault();

        etaRecord.ID    = updatedEta.ID;
        etaRecord.Title = updatedEta.Title;

        dataContext.SubmitChanges();
    }
}

Ответы [ 3 ]

6 голосов
/ 06 мая 2011

Различаются ли соединительные строки между двумя?Если нет, возможно, они оба повторно используют одно и то же соединение из одного и того же базового пула соединений, что устраняет необходимость повышения до DTC?

1 голос
/ 06 мая 2011

Я не уверен, что вы используете два различных контекста из вашего поста.
Кроме того, я понимал, что если соединения с базой данных будут к одной и той же базе данных на той же машине, то не будет необходимости переходить на DTC. Эта эскалация происходит, когда в транзакции используются два разных сервера базы данных.

0 голосов
/ 03 января 2014

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

...