記事詳細
- 投稿日
- 2026年08月23日20時14分
-
タイトル
-
asp.net core mvc: if (DateTime.Today.Day == 23) { var payments = new List<Payment>(); payments.Add(new() { Posted = DateTime.Today, SubjectNameId = null, Amount = 0, Balance = 0 }); db.Payments.AddRange(payments); db.SaveChanges(); この場合の2重登録防止のコードを教えてください。
- 内容
-
なるほど、
「毎月23日に自動でPaymentを登録するけど、同じ日に同じデータが二重登録されないようにしたい」ということですね。ASP.NET Core MVC + EF Core であれば、登録前に同じ日付のレコードが既に存在するかをチェックすればOKです。
二重登録防止コード例
補足ポイント
Any()を使って存在確認FirstOrDefault()より軽量で、存在チェックだけなら高速。
- 日付比較は
DateTime.Dateを使うPostedがDateTime型で時刻も含まれる場合は、p.Posted.Date == todayのように.Dateで比較。
- DBレベルでもユニーク制約を付けるとより安全
- アプリ側のチェックだけだと、同時実行時に二重登録の可能性が残るため、
DBにユニークインデックスを設定すると確実です。
- アプリ側のチェックだけだと、同時実行時に二重登録の可能性が残るため、
DBレベルのユニーク制約例(SQL Server)
これで同じ
PostedのレコードはDBが拒否します。✅ おすすめ構成
- アプリ側:
Any()で事前チェック - DB側:ユニーク制約で最終防衛
もし希望があれば、この処理を毎月23日に自動実行するスケジューラーコードも組み込み例を作れますが、作りますか?
そうすれば手動実行時の二重登録も防げます。Powered by Froala Editor
-
添付画像
-
画像はありません
- Genreのカテゴリ-名
- Contexts