Я работаю над плагином, который загружается через IOC из стороннего драйвера данных.Плагин и драйвер данных работают с одной и той же базой данных SQL Server 2005, но плагин фокусируется на небольшом подмножестве таблиц, которые имеют отношения внешнего ключа к таблицам, которыми управляет драйвер данных.
Моя проблема заключается вВ некоторых операциях драйвер данных создает SQLTransaction вокруг вызовов моего плагина, что приводит к сбою моих операций (исключение тайм-аута).Типичный сценарий следует этому пути псевдокода / кода:
DataDriver.InsertEntity(IBusinessObject businessObject)
{
CreateSqlTransaction();
AddEntityToEntityTable(businessObject);
Plugin.PersistAdditionalData(businessObject);
CommitOrRollbackTransaction();
}
В моем плагине я делаю что-то вроде этого:
Plugin.PersistAdditionalData(IBusinessObject businessObject)
{
var dbObject = GetObjectFromDatabase(businessObject); // Via Entity Framework
var additionalData = CreateAdditionalDataObject(businessObject);
// Insert data to a table with a foreign key relationship to a table that the
// data driver has just inserted the business object data to in the current
// transaction.
_entityModel.AddToObject_AdditionalData_AssociationSet(additionalData);
_entityModel.SaveChanges();
}
Я попытался обернуть мой методв блоке using (TransactionScope) {...}, но не удалось заставить его работать.Однако он переместил ошибку из чтения (GetObjectFromDatabase) в сохранение.
У меня нет доступа к коду драйвера данных или к любым уведомлениям о том, что транзакция была зафиксирована или откатана.Возможно, я смогу заставить разработчика внести некоторые изменения, если я знаю, что предложить, но я бы предпочел решение, которое не требует этого.