Я некоторые VB.N код, который создает экземпляр TransactionScope:инстанцирование TransactionScope возвращает нуль
LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "About to associate call data with contracts")
Using ts = New TransactionScope()
LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "Getting all unimported SatCom calls")
Мое приложение бросает исключение на призыв к созданию нового TransactionScope, с «ссылкой на объекте не установлен к экземпляру объекта. ". Исключение не бросается на мою машину разработки или мою тестовую машину; только на машине для производства клиентов, и я понятия не имею, почему. Я разместил строки отладки непосредственно до и после этой строки, поэтому я уверен, что эта строка вызывает проблему.
A использовали TransactionScopes во всем приложении, и это единственное место, исключающее исключение на клиентской машине.
«О соединении данных вызова с контрактами» записывается в журнал, а следующая запись журнала - это «Ссылка на объект, не установленная на экземпляр объекта».
Код работает нормально, если я переведу его из транзакции.
Я боролся с этим в течение 4 дней и не стал ближе.
Глупый меня. Ошибка выкидывала транзакцию, поэтому, конечно, мои журналы отладки не писали (в базу данных). Фактической причиной была разница между спецификацией импорта и импортируемыми данными. Поле, которое никогда не должно было быть нулевым, на самом деле было нулевым. Я никогда не подбирал это при тестировании, потому что у меня был правильный пример файла образца для тестирования, а не реальных данных. Звучит слишком очевидно. –
ARgg, сделано это один. Еще лучше, если вы попытаетесь ввести логику в «если прервано это сделать», и вы в конечном итоге поддерживаете все это. FYI New TransactionScope (TransactionScopeOption.Supress) позволит вам делать вещи в БД за пределами текущей транзакции. – Spence