C# WPF .Net Framework4.8 で Entity Framwork (データベースはOracle) を使用したプログラムを作っていました
Visual Studio 2022 が更新されて .NET8 が使えるようになったので、プログラムの .NET8 への移行をしています
Entity Framework Core を使用することになったため、仕様が変わったところを少しだけ
Oracleから順序番号を取得する
.NET Framework 4.8 (Entity Framework)
int seq = dbcontext.Database.SqlQuery("SELECT 順序テーブル名.NEXTVAL FROM DUAL").First();
.NET 8 (Entity Framework Core)SQL文字列は$を付けて、FormattableStringにする
.NET Frameworkと同じようにすると、SELECT "t"."Value" FROM(実行したいSQL文) "t" FETCH FIRST 1 ROWS ONLYとなって、Oracleの実行時にエラーになるため
ToList()を間に入れて、結果を1度Listにしてから順序番号を取り出す
int seq = dbcontext.Database.SqlQuery($"SELECT 順序テーブル名.NEXTVAL FROM DUAL").ToList().First();
Entity Framwork Core の ChangeTracker
EntityStateの内容がかわりました
.NET Framework 4.8 (Entity Framework)
状態 | 値 |
---|---|
Added | 4 |
Deleted | 8 |
Detached | 1 |
Modified | 16 |
Unchanged | 2 |
.NET 8 (Entity Framework Core)
状態 | 値 |
---|---|
Added | 4 |
Deleted | 2 |
Detached | 0 |
Modified | 3 |
Unchanged | 1 |
EntityState のチェックで HasFlag は使用できません。== 等の比較演算子を使用します。
Process.Startの変更
.NET Framework 4.8
ファイル名を指定して関連付けられたプログラムが起動されるようにする
System.Diagnostics.Process.Start("ファイル名");
.NET 8ファイル名を指定して関連付けられたプログラムが起動されるようにしたい場合、ProcessStartInfo.UseShellExecute を true にする
var proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "ファイル名";
proc.StartInfo.UseShellExecute = true;
proc.Start();