中央競馬の予想や購入したもののメモなどを書いて行こうかと。まあ、個人的なメモ的なブログです。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
次々と見つかるEntity Framework 6との違いorz Key属性は全てやり終えて、いざミグレーションって今度は
The entity type 'クラス' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.
と言われる。Entity Framework 6では何の指定もしなくても行けてたのにorz これ、ある記事(C#での説明でしたが)には単にクラス宣言に[Owned]付けるだけで解決したってあったので試してみましたが、「ステートメントをメソッドの外側に置くことは出来ません」となり、またまたOnModelCreatingのオーバーライド内に追加する方法を取ることにしました。
modelBuilder.Entity(Of エンティティ)().OwnsOne(GetType(クラス), 該当メンバー)
って感じにVisual Basicではなる様です。C#のサンプルではTypeOfとか使ってたので、VBでも全く同じキーワードがあるのでそのままやろうとしたら、全然違うものだと。
2021/12/13 0:43追記
あまりの量なのでもう一度Ownedについて調べ直してみると、Visual Basicでは
[Owned]
ではなく
<Owned>
なのが判明(*^^)v
しかし、ここで大きな問題が! 全ての問題をクリアしてこれでやっとミグレーション完了かと思いきや、今更な事態に愕然とするorz
The projedct language 'VB' isn't supported by the buil-in IMigrationsCodeGenerator service. You can try looking for an additional NuGet package which supports this language; moving your DbContext type to a C# class library referenced by this project; or manually implementing and registering the design-time service for the programming laguage.
Microsoft.EntityFrameworkCore.ToolsはVisual Basicには対応してないんだとorz
ミグレーションは出来る事なら避けて進みたい部分なんですが、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が外れないのかもしれないけどね。
入院中に作業中断してましたが、本日無事に退院してきました(*^^)v
入院中にスマホでグーグル先生に諸々の質問してVSC2022移行の糸口を見つけた気がするので本格的に作業開始。
まず、ラッパーをSystem.Data.SQLiteからMicrosoft製のSQLiteラッパーにする事で.NET 6.0のWindowsフォームアプリケーションでの開発を可能にする。
Microsoft.Data.Sqlite.Core
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools
以上の3つをNuGetパッケージマネージャーでインストール。プロジェクトに新しい項目の追加でADO.NET Entity Data Modelの追加は機能しないので単にクラスの追加をしてモデルの作成。以前はコンストラクタのオーバーライドしてた所を
Protected Overrides Sub OnConfiguring(optionBuilder As DbContextOptionsBuilder)
Dim connectingString = New SqliteConnectionStringBuilder With {
.DataSource = "パス"}.ToString()
optionBuilder.UseSqlite(New SqliteConnection(connectingString))
End Sub
な感じにする。
実際のデータベース登録時のSqliteConnectionStringBuilderの所が
Dim sqlBuilder As New SqliteConnectionBuilder()
sqlBuilder.DataSource = "パス"
sqlBuilder.JournalMode = SQLiteJournalModeEnum.Persist
sqlBuilder.SyncMode = SynchronizationModes.Off
としていたのを、
Dim sqlBuilder as New SqliteConnectionBuilder With {.DataSource = "パス"}
とした。JournalModeやSyncModeは無いらしい。
SqliteCommandも少し違いこれまではSqliteConnectionのみを引数に指定してたが、コネクション渡すには先にコマンドテキスト渡すらしく、コンストラクタに2つパラメーター指定する
New SqliteCommand(text, con)
な感じにした。
これ以外にも簡単にデータベースをLinqやAddメソッドでアクセスするもの変える必要があるらしく、明日以降調べて書き直す事にする。
順調に開発してると思いきや、壁に当たるw
本来ならデータベース設計自体の問題な部分もあるが、ここは忠実に提供元の仕様に従った設計でしてるので、そこは仕方ないのでそのままで行く。SQLiteでのデータベースとして、滅茶苦茶膨大な項目を含むテーブルになっているのもトラブルの要因の一つかとは思う。1テーブルで千を超える項目とかは問題なのもか^^;
今現在、107個の項目があるテーブルで表題のエラーが発生しているんだが、調べるのに苦労している。パラメータの属性違い? スペルミス? 色々な要因があるとは思うが、該当するミスが見当たらい。適切なデバッグ方法が分からないので、暗礁に乗り上げてる感じで前に進めない(>_<)
更に問題は、明日個人的に身体に問題があり、手術が必要って事で入院する事になったので、一旦作業的にも止まる感じです。
色々と買ってみたw
20年程使ったキーボード。YBBの契約で、ああ、ADSLだったと思いますが、おまけで頂いたキーボードなんですが、当初はPS2でのFFXI用でしたが、記憶にない時期にPCで使う様になり、別に不具合があった訳じゃないが、今回新調してみた^^
数カ月前にマウスの不調でサンワサプライのマウスにしてたんですが...もう、何十年もマイクロソフト製マウスだったのに、潔く変えたんですが、
もこの際って事でサンワサプライに^^
はっきり言って、コスパは悪くないけど、まあね、良い訳じゃない。でも、キーボードって慣れだから。今後、慣れる様に頑張る。タッチ感は悪くはないけど、キーの傾斜なのか気にはなるw
そもそもの感覚的な事なので、個人差があるとは思います。もう、この年では次はないとは思うので、慣れるしかないね^^
今回のブラックフライデーは、キーボード、イヤフォン、人感センサー付ライト等を購入しました。ああ、メインは娘用にパネルヒーターだったんですが、これも問題なさそうなので、良かったです。