Microsoft.Practices.EnterpriseLibrary.Data: выполнить несколько операторов в одной транзакции - PullRequest
4 голосов
/ 19 ноября 2010

Я недавно начал с существующего проекта, и он работает с объектами Microsoft.Practices.EnterpriseLibrary.Data.

Теперь я хочу выполнить несколько хранимых процедур в одной транзакции (вставка 1: n, которая должнапровал или успех)

Но я не знаю, как ....

Кто-нибудь может мне помочь?

Типичный код для выполнения sp в этом проекте выглядит такэто:

Database oDatabase = DatabaseFactory.CreateDatabase(CONNECTION_STRING_KEY);
DbCommand oDbCommand = oDatabase.GetStoredProcCommand("upCustomer_Insert");

Int32 iCustomerKey = 0;
oDatabase.AddInParameter(oDbCommand, "Firstname", DbType.String, p_oCustomer.FirstName);
oDatabase.AddInParameter(oDbCommand, "Lastname", DbType.String, p_oCustomer.LastName);

oDatabase.ExecuteNonQuery(oDbCommand);

Ответы [ 3 ]

6 голосов
/ 19 ноября 2010

Вам необходимо использовать DbTransaction :

using (DbConnection connection = db.CreateConnection())
{
    connection.Open();
    DbTransaction transaction = connection.BeginTransaction();

    try
    {
        db.ExecuteNonQuery(transaction, sp1);
        db.ExecuteNonQuery(transaction, sp2);
        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
}

Обратите внимание, как первый параметр ExecuteNonQuery - это транзакция, которую нужно использовать.

Подробнее здесь .

1 голос
/ 02 июля 2014

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

0 голосов
/ 19 ноября 2010

Вы можете заключить вызовы в область транзакций, см .: http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

...