Некоторые лучшие практики транзакций:
- Сделайте транзакции максимально короткими
- Доступ к как можно меньшему количеству данных в транзакции
С точки зрения Enterprise Library, DAAB осведомлен о System.Transaction, поэтому я бы использовал TransactionScope. Исходя из того, что вы сказали что-то вроде:
Database database = DatabaseFactory.CreateDatabase();
using (TransactionScope scope =
new TransactionScope(TransactionScopeOption.RequiresNew))
{
foreach(MyClass myClass in myClasses)
{
myClass.Publish(database);
}
scope.Complete();
}
В этом примере отсутствует обработка ошибок, и предполагается, что возникает исключение, если транзакцию необходимо откатить.
Кажется, ваши транзакции включают большое количество записей и занимают достаточно много времени. Сколько записей вы обновляете в транзакции? Как долго ваши транзакции? Все ваши операторы SQL должны быть в одной транзакции или вы можете разбить их на более мелкие транзакции?
Вы пытались профилировать свои операторы SQL для обеспечения их эффективности. Также убедитесь, что вы не снимаете чрезмерные блокировки и не получаете проблем с блокировкой / блокировкой.