こんにちは。決済システムでエンジニアをやっております hoshino33 です。
今回は、.NET 6から.NET 8にバージョンアップした際に対応した内容を記載しようと思います。
はじめに
決済システムでは.NETを利用して開発を行っております。 .NET 6は2024年11月12日を持ってサポート終了となるためバージョンアップしなければいけません。 サポート状況については「.NET および .NET Core サポート ポリシー」をご確認ください。 今回は「新しい .NET バージョンにアップグレードする」を行う上で他で対応が必要だった内容を記載したいと思います。
対応内容
その前に決済システムではO/RマッパーにDapperを利用しています。 また、Entity作成とDbContext作成にはEntity Framework Core (EF Core)のscaffoldを利用しております。 お察しの良い方はお気づきかもしれませんが、EF CoreとDapper側にていくつか対応しなければいけないことがありました。
EF Core
(1)scaffold実行時にDbContext名に_(アンダースコア)があった際に削除される。
説明
こちらは、scaffold実行時に今までDatabase_NameContext
のようにクラスが作成されていましたが、DatabaseNameContext
のように作成されるようになりました。
対応
_(アンダースコア)
がない名前でも良かったのですが、参照箇所が多かったので今回はscaffold実行時に--context
オプションを利用して_(アンダースコア)
ありの命名を指定するように対応しました。
(2)scaffold実行時にテーブルのdateとtimeが型変更されるようになった。 説明 今まではそれぞれDateTimeとTimeSpanで作成されていましたが、DateOnlyとTimeOnlyになりました。 SQL Server の date と time が .NET の DateOnly と TimeOnly にスキャフォールディングするようになります 対応 TimeSpan型は利用がなかったのですがDateTimeは利用していたため呼び出している部分を根こそぎDateOnlyに変更しました。
(3)DB接続時に証明書が必要になった。
説明
今までは既定値がEncrypt=False
だったようですが Encrypt=True
になりました。
こちらの変更により、何もしていない状態ではDB接続時にエラーが発生するようになります。
SQL Server 接続で、Encrypt の既定値は true になります
対応
接続文字列にTrustServerCertificate=True
を追加して対応しました。
※サーバーとクライアントがAWS上のプライベートネットワーク内にあり、こちらの設定で問題ないと判断しています。
Dapper
(1)DapperでDateOnlyとTimeOnlyが対応していない 説明 現時点の最新バージョンの2.1.44(2.1.35)では未対応のようです。 2.1.37でDateOnlyとTimeOnlyの対応がされたようですが何らかの問題で現在は戻っているようです。 また、最新版は2.1.44となっておりますが、issueにあるように現在は2.1.35が公開されています。 対応 独自に実装してDateOnlyとTimeOnlyが対応できるようにしました。 ※いずれDapper側が対応してくれると思われます。
おわりに
.NETのバージョンアップ自体は容易にできましたが、関連するパッケージの部分で少し手間どりました。 もちろんバージョンアップ後はユニットテストや動作確認を行い問題ないことを確認しております。 他にも細かいものはいくつかあったような気がしますが、大きな部分のご紹介でした。 バージョンアップする際の参考になれば幸いです。
また、.NETの長期的なサポート (LTS)は最初のリリースから3 年間サポートされています。なので.NET 8は2026年11月10日までサポートされますので、それまでに次のバージョンへバージョンアップさせる必要がありますが、今回の内容を生かしてよりスムーズに対応できるよう心がけたいと思います。
We are hiring!!
ROBOT PAYMENTでは一緒に働く仲間を募集しています!!!