Eu posto a solução abaixo aqui porque depois de algumas buscas foi onde eu parei, então outros podem também. Eu estava tentando usar o EF 6 para chamar um procedimento armazenado, mas tive um erro semelhante porque o procedimento armazenado tinha um servidor vinculado sendo utilizado.
A operação não pôde ser realizada porque o provedor OLE DB _ para o servidor vinculado _ não conseguiu iniciar uma transação distribuída
O gerenciador de transações do parceiro desativou o suporte para transações remotas / de rede *
Pular para o SQL Client corrigiu meu problema, o que também confirmou para mim que era uma coisa EF.
Tentativa baseada no método gerado pelo modelo EF:
db.SomeStoredProcedure();
Tentativa baseada em ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
Com:
var connectionString = db.Database.Connection.ConnectionString;
var connection = new System.Data.SqlClient.SqlConnection(connectionString);
var cmd = connection.CreateCommand();
cmd.CommandText = "exec [SomeDB].[dbo].[SomeStoredProcedure]";
connection.Open();
var result = cmd.ExecuteNonQuery();
Esse código pode ser reduzido, mas acho que essa versão é um pouco mais conveniente para depurar e avançar.
Não acredito que o Sql Client seja necessariamente a escolha preferida, mas achei que pelo menos vale a pena compartilhar se alguém mais com problemas semelhantes for encontrado aqui pelo Google.
O código acima é C #, mas o conceito de tentar alternar para o cliente Sql ainda se aplica. No mínimo, será um diagnóstico tentar fazer isso.