Получить идентификатор транзакции, когда транзакция зафиксирована

Я использую интерфейс IEnlistmentNotification из области транзакции, и я хочу получить доступ к текущему идентификатору транзакции в методе фиксации после завершения области следующим образом:

public void Commit(Enlistment enlistment)
{     
    string transactionId = Transaction.Current.TransactionInformation.LocalIdentifier;
    enlistment.Done();
} 

Но я получаю сообщение об ошибке, потому что теперь транзакция.current равна нулю. Из того, что я проверяю, у экземпляра enlistment есть закрытый член транзакции ID, но я не могу получить к нему доступ из-за его уровня защиты.

Есть ли другой способ получить идентификатор транзакции после завершения области?

0 ответов

        using (TransactionScope scope = new TransactionScope())
        {
            using (YourContext context = new YourContext())
            {
                //DB operations
                context.SaveChanges();
            }
            Transaction.Current.TransactionCompleted += Current_TransactionCompleted;
            TransactionInformation info = Transaction.Current.TransactionInformation;
            string transactionId = Guid.Empty.Equals(info.DistributedIdentifier) ? info.LocalIdentifier : info.DistributedIdentifier.ToString();
            scope.Complete();
        }

        //For the transaction completed event:
        private void Current_TransactionCompleted(object sender, TransactionEventArgs e)
        {
             //e.Transaction.TransactionInformation contains the Id
        }
Другие вопросы по тегам