記事詳細
- 投稿日
- 2026年08月23日20時20分
-
タイトル
-
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日に自動実行するスケジューラ
- 内容
-
了解しました。
ご質問は以下の2点ですね。- 毎月23日に自動登録する処理で、二重登録を防ぐ方法
- ASP.NET Core MVCで毎月23日に自動実行するスケジューラーの組み込み例
① 二重登録防止コード例
Paymentsテーブルに同じ日付のレコードが既に存在するかをチェックしてから登録します。ポイント
Any()を使って存在チェックPostedがDateTime.Todayと一致するレコードがあれば登録しない- DB側でも
Postedにユニーク制約を付けるとさらに安全
② 毎月23日に自動実行するスケジューラー例(Hosted Service)
ASP.NET Coreでは、Windowsのタスクスケジューラやcronの代わりに
IHostedServiceを使ってアプリ内で定期実行できます。サービスクラス
Program.csへの登録補足
- 二重登録防止はアプリ側のチェック+DBのユニーク制約の両方を推奨
- スケジューラーはアプリが常時稼働している前提(IISやKestrel)
- 外部ジョブ管理(Windows Task Scheduler, cron, Hangfire, Quartz.NET)を使うとより柔軟に管理可能
もしご希望があれば、このコードを Hangfire を使った「管理画面付きスケジューラー」に書き換えることもできます。
Hangfireなら毎月23日0時に確実に実行できます。このあと、Hangfireを使った「毎月23日0時実行+二重登録防止」コード例も作成できますが、
そちらにしますか?
そうすればアプリが落ちても再実行保証ができます。Powered by Froala Editor
-
添付画像
-
画像はありません
- Genreのカテゴリ-名
- Contexts