Альтернатива TransactionScope сборки System.Transaction в каркасе ядра .net

В настоящее время сборка System.Transaction не является частью каркаса ядра .net(см. https://github.com/dotnet/corefx/issues/2949). В моем приложении (asp.net core mvc) мне нужно использовать TransactionScope для обработки транзакций.

Вопрос:

Есть ли альтернативная обработка транзакций, которая работает с базой ядра .net? Я попытался использовать Castle.Transactions как альтернативу, которая также не поддерживается на данный момент.

Ответы

Ответ 1

Обновление 2.NET Core 2.0 уже вышло. Вы можете использовать этот API. См. Https://docs.microsoft.com/en-us/dotnet/api/system.transactions.transactionscope?view=netcore-2.0.

Обновление System.Transaction будет доступно в NET Core 2.0. См. Https://github.com/dotnet/core/blob/master/roadmap.md для получения подробной информации о предстоящих выпусках.

Оригинальный ответ

System.Transactions (или окружающие транзакции) не реализованы в .NET Core 1.0.0, но могут быть реализованы в будущих версиях.

Вы можете обойти это, используя явные транзакции.

        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();

            using (var transaction = connection.BeginTransaction())
            {
               // transaction.Commit();
               // transaction.Rollback();
            }
        }

Ответ 2

Просто хотел оставить здесь комментарий на тот случай, если кто-нибудь бродит по этому посту во время исследования этой проблемы. Я случайно столкнулся с этим в .net core 2.1, используя Dapper, который по умолчанию включает System.Data.SqlClient 4.5.0. Добавление версии System.Data.SqlClient 4.5.1 самостоятельно через nuget работало. Таким образом, кажется, это было исправлено с 4.5.1.

Ниже приведены соответствующие разделы моего файла csproj:

<ItemGroup>
   <PackageReference Include="Dapper" Version="1.50.5" />
   <PackageReference Include="System.Data.SqlClient" Version="4.5.1" />
</ItemGroup>