Почему TransactionScope не выполняет откат распределенных транзакций? - PullRequest
1 голос
/ 18 октября 2010

Я использую инфраструктуру сохранения объекта под названием ECO для обновления данных до SQL Server.Я заметил, что если я создаю TransactionScope, а затем сознательно генерирую исключение после того, как моя первая транзакция зафиксирована, но до того, как моя вторая зафиксирована, первая база данных обновляется, а вторая нет.TransactionScope вокруг многочисленных обновлений - это все, что мне нужно было сделать после запуска координатора распределенных транзакций в основной БД?

Может ли кто-нибудь придумать причину, по которой это разрешает сценарий, в котором обновляется первая БД, а не вторая?

1 Ответ

1 голос
/ 18 октября 2010

Понял!

ECO поддерживает следующие базы данных ...

  1. Blackfish
  2. DB2
  3. FireBird
  4. Mimer
  5. MySql
  6. NexusDB
  7. Oracle
  8. SQLite
  9. SQLServer
  10. Sybase
  11. Поставщик данных Borland
  12. База данных Borland eXpress (DBX)

Сегодня утром я вспомнил, что некоторые из них не поддерживают пул соединений, поэтому в абстрактном классе PersistenceMapper ECO реализовал собственный пул соединений. Это то, что происходило

  1. Приложение запускается
  2. Я решил сохранить информацию о сопоставлении моих объектов в самой БД, поэтому ECO получает соединение и считывает эту информацию о сопоставлении
  3. ECO возвращает соединение с пулом, но его собственный пул
  4. Позже я запускаю распределенную транзакцию
  5. Я обновляю свои объекты в базе данных
  6. ECO получает соединение из своего пула

Как следствие, соединение не зачисляется в текущую распределенную транзакцию. Учитывая, что SqlConnection выполняет свой пул, было допустимо установить для параметра PersistenceMapperSqlServer.MaxPoolSize значение ZERO.

Теперь он использует компонент SqlConnection, чтобы иметь дело с созданием / удалением Соединений, не только этот компонент объединяет в пул соединения, но также правильно обрабатывает распределенные транзакции!

Я написал разработчикам, чтобы они знали, что они должны пометить это свойство как устаревшее.

...