Понял!
ECO поддерживает следующие базы данных ...
- Blackfish
- DB2
- FireBird
- Mimer
- MySql
- NexusDB
- Oracle
- SQLite
- SQLServer
- Sybase
- Поставщик данных Borland
- База данных Borland eXpress (DBX)
Сегодня утром я вспомнил, что некоторые из них не поддерживают пул соединений, поэтому в абстрактном классе PersistenceMapper ECO реализовал собственный пул соединений. Это то, что происходило
- Приложение запускается
- Я решил сохранить информацию о сопоставлении моих объектов в самой БД, поэтому ECO получает соединение и считывает эту информацию о сопоставлении
- ECO возвращает соединение с пулом, но его собственный пул
- Позже я запускаю распределенную транзакцию
- Я обновляю свои объекты в базе данных
- ECO получает соединение из своего пула
Как следствие, соединение не зачисляется в текущую распределенную транзакцию. Учитывая, что SqlConnection выполняет свой пул, было допустимо установить для параметра PersistenceMapperSqlServer.MaxPoolSize значение ZERO.
Теперь он использует компонент SqlConnection, чтобы иметь дело с созданием / удалением Соединений, не только этот компонент объединяет в пул соединения, но также правильно обрабатывает распределенные транзакции!
Я написал разработчикам, чтобы они знали, что они должны пометить это свойство как устаревшее.