.NET Core で TransactionScope を使ってみる (Preview)

だいぶ前にこれ書いて放置してたんですが、
.NET Core で SqlClient と TransactionScope は 2.1 から? - お だ のスペース

ムッシュが何か書いてたので久々に検証してみました。
SQL Server 2017 の on Linux における分散トランザクションのサポート状況について at SE の雑記

相変わらず System.Data.SqlClient v4.4.2 では例外出るんですが、 v4.5 の preview では動くらしいので、v4.5 の preview で試してみました。
dotnet-core - System.Data.SqlClient 4.5.0-preview2-25707-02 - MyGet - Hosting your NuGet, npm, Bower, Maven, PHP Composer and Vsix packages

Install-Package System.Data.SqlClient -Version 4.5.0-preview2-25707-02 -Source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json 

これで動かすと System.Diagnostics.DiagnosticSource のバージョンが違うって例外が出ますが、System.Diagnostics.DiagnosticSource のバージョンも上げてあげると動きました。

Install-Package System.Diagnostics.DiagnosticSource -Version 4.5.0-preview2-25707-02 -Source https://dotnet.myget.org/F/dotnet-core/api/v3/index.json 

これでちゃんとトランザクション効いてる動きしてます。

Dependencies 見ると他にも preview なのありますが、この程度のソースなら DiagnosticSource だけ preview にしたらいけるみたいです。

using System;
using System.Data.SqlClient;
using System.Transactions;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            var connstr = @"~";
            using (var tran = new TransactionScope())
            using (var conn = new SqlConnection(connstr))
            {
                conn.Open();
                // 何か更新
                // 更新したデータ引っ張てくる
                // tran.Complete(); ロールバックされることを確認する
            }
        }
    }
}

というわけで v4.5 待ちですねー。
ほんと早く使わせてくれ。。