MIT’s blog

個人的なメモかな

Entity Framework CoreはKey属性未対応

ミグレーションは出来る事なら避けて進みたい部分なんですが、SQL Server Expressの時には全く意識せず、単にコードファーストしていれば問題なかったのに、SQLiteのラッパーはミグレーションが好きな様です。で、System.Data.SQLiteでもだいぶ苦労しましたが、Microsoft.EntityFrameworkCore.Sqlite(Tools)でも苦労させられました。
プロジェクトがスタートアップ プロジェクトに設定されてないんじゃないかとか何とか言われ、プロジェクトのプロパティ色々見て、グーグル先生にも問合せするも解決出来ず時間だけが過ぎる感じ。で、まあ、結論的にはターゲットCPUをJV-Linkが64it未対応な為の対策でAnyCPUではなくx86にしていたのが原因だった様です。取敢えず、ミグレーションする為にAnyCPUに戻してビルドするとミグレーションが動きました。

 

余談ですが、このミグレーション処理の説明では最初にEnable-Migrationsをするとあったのですが、現在はこれは不要になったと出ます。

Add-Migration プロジェクト名

とすれば動きます。

 

で、新たな問題が表題です。これまでEntity Framework 6だったのですが、.NET 6に移行する為にEntity Framework Coreになったんですが、Key属性未対応って事で複合キーは全て明示的に指定する必要が出てきた。この方法もC#のサンプルから途方に暮れてグーグル先生が解決してくれました。

Protected Overrides Sub OnModelCreating(ByVal modelBuilder As ModelBuilder)
    modelBuilder.Entity(Of エンティティ)().HasKey(Function(e) New With {e.key1,e.key2})
End Sub

な感じで57個あるテーブルのほぼ全てに近い数が複合キーなので記述する事になりました(>_<)

 

ここまでたどり着くのにVSC 2022のバグじゃないかと思われるのは、プロジェクト最初に作る時に自動で追加されるForm1が度々復活してくる事。プロジェクトのプロパティ変更してビルドする度にmdiMainに変更したスタートアップ オブジェクトがForm1に戻って無いよってエラーになるorz まあ、だからpreviewが外れないのかもしれないけどね。