Мы используем RDS (Amazon Relational Database Service) для нашей базы данных. у нас есть некоторые sp-ы, которые вызвали транзакции. мы настроили ExecutionStrategy для нашего DBConfig, как это
public class MpDbConfiguration : DbConfiguration
{
public MpDbConfiguration()
{
//SetExecutionStrategy(
// "System.Data.SqlClient", () => new MpExecutionStrategy(10, TimeSpan.FromMilliseconds(100)));
SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new MpExecutionStrategy(10, TimeSpan.FromMilliseconds(100)));
}
//.....
}
SuspendExecutionStrategy имеет значение True, когда у нас есть пользовательская транзакция (связанная статья заставила меня использовать defaultStrategy: https://docs.microsoft.com/en-us/ef/ef6/fundamentals/connection-resiliency/retry-logic)
Проблема. У меня возникает эта проблема при выполнении транзакций, подобных этой
using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }))
{
if (entity != null && !string.IsNullOrEmpty(entity.EmailAddress))
{
ObjectFactory.GetInstance<IBankingService>().UnRegister(RequestContext.Current, entity);
}
Data.Configuration.MpDbConfiguration.SuspendExecutionStrategy = true;
Context.Current.Database.ExecuteSqlCommand("DeleteAccountByEmailAddress @usertodelete",
new SqlParameter("usertodelete", emailAddress));
scope.Complete();
Data.Configuration.MpDbConfiguration.SuspendExecutionStrategy = false;
}
//....
Этот SP - очень большая транзакция, но использует только одну базу данных. Ошибка, которую я получаю, - включить DTC. мой вопрос почему мне нужен код неисправности
Основной поставщик не удалось открыть. Сетевой доступ для
Диспетчер распределенных транзакций (MSDTC) отключен. пожалуйста
включить DTC для доступа к сети в конфигурации безопасности для MSDTC
с помощью инструмента администрирования служб компонентов.
На самом деле эти термины довольно новы для меня, но на основании поиска, который я обнаружил, DTC используется только тогда, когда у нас есть распределенные транзакции. В нашем случае у нас его нет.