Альтернатива 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>