Tôi đăng giải pháp dưới đây ở đây bởi vì sau một số tìm kiếm, đây là nơi tôi đã hạ cánh, vì vậy người khác cũng có thể. Tôi đang cố gắng sử dụng EF 6 để gọi một thủ tục được lưu trữ, nhưng đã gặp lỗi tương tự vì thủ tục được lưu trữ có một máy chủ được liên kết đang được sử dụng.
Không thể thực hiện thao tác vì nhà cung cấp OLE DB _ cho máy chủ được liên kết _ không thể bắt đầu giao dịch phân tán
Người quản lý giao dịch đối tác đã vô hiệu hóa hỗ trợ của nó cho các giao dịch từ xa / mạng *
Chuyển sang SQL Client đã khắc phục sự cố của tôi, điều này cũng xác nhận với tôi rằng đó là một thứ EF.
Cố gắng dựa trên phương pháp tạo mô hình EF:
db.SomeStoredProcedure();
Nỗ lực dựa trên ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
Với:
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();
Mã đó có thể được rút ngắn, nhưng tôi nghĩ rằng phiên bản đó thuận tiện hơn một chút cho việc gỡ lỗi và chuyển qua.
Tôi không tin rằng Sql Client nhất thiết phải là một lựa chọn ưu tiên, nhưng tôi cảm thấy điều này ít nhất cũng đáng được chia sẻ nếu bất kỳ ai khác gặp vấn đề tương tự được google đưa đến đây.
Code trên là C #, nhưng khái niệm cố gắng chuyển sang Sql Client vẫn được áp dụng. Ít nhất nó sẽ được chẩn đoán để cố gắng làm như vậy.