だいぶ前にこれ書いて放置してたんですが、
.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 待ちですねー。
ほんと早く使わせてくれ。。