在 .NET Core 框架中,System.Transaction 程序集的替代方案是什么?

19

目前,System.Transaction程序集不是.net core框架的一部分(请参见https://github.com/dotnet/corefx/issues/2949)。在我的应用程序(asp.net core mvc)中,我需要使用TransactionScope来处理事务。

问题:

有没有替代方案可以与.net core框架一起使用来处理事务? 我尝试使用Castle.Transactions作为替代方案,但目前也不支持。


正如您所引用的线程所述,暂时没有计划实现System.Transactions。您可以查看TransactionScope在完整的.NET中是如何实现的,但是在.NET Core中重新创建TransactionScope的确切行为超出了Stack Overflow答案的范围。 - natemcmaster
我的希望是找到一个像Castle.Transactions这样的NuGet包,可以作为System.TransactionScope的替代方案。他们在.NET Core中如何处理事务? - MUG4N
2
最近在GitHub上有一些活动,https://github.com/dotnet/corefx/tree/dev/api/src/System.Transactions,但是找不到NuGet包。对于分布式/环境事务的全面支持可能不会太遥远。 - Kamalakar Nellipudi
我鼓励您为此缺失功能的官方问题点赞和/或发表评论:https://github.com/dotnet/corefx/issues/13532 - Randy Burden
2个回答

21
更新2: .NET Core 2.0已经发布,您可以使用此API。请参考https://learn.microsoft.com/en-us/dotnet/api/system.transactions.transactionscope?view=netcore-2.0 更新: System.Transactions将在.NET Core 2.0中提供。有关即将发布的详细信息,请参见https://github.com/dotnet/core/blob/master/roadmap.md
原始答案: .NET Core 1.0.0中未实现System.Transactions(或环境事务),但可能在以后的版本中实现。 您可以通过使用显式事务来解决此问题。
        using (var connection = new SqlConnection(connectionString))
        {
            connection.Open();

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

这个已经过时了,对吧?https://github.com/dotnet/corefx/tree/dev/api/src/System.Transactions/src - gdoron
2
它还没有发布。https://github.com/dotnet/corefx/pull/10089 但是,是的,这个加上许多其他API正在被添加,以使.NET Core更兼容.NET Framework。 - natemcmaster
.NET Core 2.0是否支持环境事务和分布式事务? - Ajt
1
我使用这里的示例https://learn.microsoft.com/en-us/dotnet/api/system.transactions.transactionscope?view=netcore-2.0,在.NET Core 2中进行环境交易登记是不支持的。 - paul rockerdale
1
@natemcmaster 感谢您的更新! - MUG4N

4

如果有人在研究此问题时经过这篇文章,我想在这里留下一条评论。我在使用 Dapper 时,遇到了 .net core 2.1 的随机问题,它默认包含 System.Data.SqlClient 4.5.0。通过 nuget 独立添加版本 System.Data.SqlClient 4.5.1 可以解决该问题。因此,从 4.5.1 版本开始,该问题已得到修复。

以下是我的 csproj 文件的相关部分:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接