↑エラー箇所を見つめる私の顔(イメージ)
↓1時間後
意味ないとわかっていても(念の為)VS再起動→ビルド→失敗をたまにやってしまう・・
🎉趣味活動
昨日さんざん悩んでたエラーが直りました。GPTへのプロンプトが精査できたおかげで解決策を得られたという感じです。やっぱり人間、寝ないとダメですねw
原因は二重トラッキングが起こっていたこと。では何と何かというと、変更前のDBの状態を検索するメソッド Find() と更新するためのメソッド Update() が動き出してしまったことです。変更前と変更後で整合性が取れなくなるのを防ぐために二重トラッキングは禁止されているということ(だと思います)ですね。それさえわかれば簡単で、変更箇所のあったところだけ更新すればいいのでこう書けばよかったと。
早い話、Updateメソッドは必要なかったというオチでした。わおw
これでCRUDまわりが作れましたね。めでたしめでたし。
この仕組みさえ作れてしまえば後は簡単で、学習リソースとブログとで入力項目さえ調整すれば良さそう
---
ブログ用のテーブル作ろうと思い、複合主キーにしたら怒られた🥺
InvalidOperationException: The entity type 'UserBlogs' 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. Microsoft.EntityFrameworkCore.Infrastructure.ModelValidator.ValidateNonNullPrimaryKeys(IModel model, IDiagnosticsLogger<Validation> logger)
「主キーの設定するのか、あえて HasNoKey にするのか、どっちなんだい!(きんにくん登場)」
よし、HasNoKey つけちゃうぞ~~(日曜日のお父さん感)
↓結果
Unable to create a 'DbContext' of type 'BlogDbContext'. The exception 'The navigation 'UserBlogs' cannot be added because it targets the keyless entity type 'UserBlogs'. Navigations can only target entity types with keys. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.'
「お前さん、キーなしにどうやってナビゲーションするねん?なめとんのか?」
🥺 ゴメンナサイ...ダッテ, HasNoKey() ツケレバイイッテ...
そんなこんなありまして、ブログ用のDB設計を見直すことにしました。
EF Core では主キーありきらしいので中間テーブルにもIDつけておきました。本来であれば外部キーの組み合わせだけでも十分かもしれませんが解決策がわからずで。どうすりゃええんや・・?
とりあえずはテーブルの作成までいけました。あとは流れるようにして ViewModel、Controller、Viewまで、ニュース記事でベースは完成していたのでだいぶ楽に作れました。
CRUDはいいのですが、問題は UserBlogs テーブルに User と Blog を追加しようとしたときです。下記をみるかぎり、ちゃんと BlogID には 14, UserID には UUID が設定されています。つまり、このUUIDで検索すればどのくらいブログを書いたかが取得できるようになるわけですね。
この直後、
SqlException: Violation of PRIMARY KEY constraint 'PK_IdentityUsers'. Cannot insert duplicate key in object 'mcwithcode.IdentityUsers'. The duplicate key value is (6e2dafe7-4a01-4bf9-a18b-60190b8c9464).The statement has been terminated.
は??IdentityUsers に登録する処理書いていないのに書き込もうとするのなぁぜなぁぜ?
これのどこに IdentityUser への書き込み処理があるというんですか!!!わからん・・。ということでふて寝しようと思います。
---
後作りたいものがあって、よくZennとかのMarkdown(本文)にスクショを貼り付けると自動で画像がアップロードされて、リンクが挿入されるやつ。アレどうやって作っているんだろ??
📝メモとか
編集したデータは SetValues() で保存すればヨシ。Update() はなんか違ったのかな?
DIにも種類があるらしく、AddScoped の場合、リクエストごとに新しいインスタンスが生成される。だから null になるわけだと。
🖋️雑記
12時半ごろ起床してお昼食べにいきました(怠惰すぎんか)
決済サービスで遊べるサイトにハマったw
個人的にWAONほしい~と思っていたら・・
いや対応早すぎて草
弾丸スキー旅行か~
よくこんな企画思いつくよな~稚内行ってみてぇ~
💪明日へ向けてのやっていき
埼玉の温泉に行く(これで関東の温泉コンプリート!)
温泉に浸かりながら設計考えようかな~