記事詳細


投稿日
2026年08月13日10時46分
タイトル

ASP.NET Core MVC: CreateTableのC#のコード内で、” ReferentialAction.NoAction);というコードの意味は?

内容

ReferentialAction.NoAction は、Entity Framework Core (EF Core) のマイグレーションで外部キー制約を作成するときに、参照先のデータが削除または更新された場合の動作を指定する列挙値です。

意味

NoAction は 「何もしない」 という意味で、
外部キーの参照先(親テーブル)の行が削除または更新されても、EF Core 側では自動的に子テーブルのデータを変更・削除しません。

ただし、実際にはデータベース側の外部キー制約が働くため、
親データを削除しようとすると、子データが残っている場合は エラー(制約違反) になります。

マイグレーションコードの一部例:

Csharp
migrationBuilder.CreateTable( name: "Orders", columns: table => new { Id = table.Column<int>(nullable: false) .Annotation("SqlServer:Identity", "1, 1"), CustomerId = table.Column<int>(nullable: false) }, constraints: table => { table.PrimaryKey("PK_Orders", x => x.Id); table.ForeignKey( name: "FK_Orders_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.NoAction // 親削除時に何もしない ); });

他の ReferentialAction との違い

動作
Cascade親が削除/更新されたら、子も自動的に削除/更新される
SetNull親が削除/更新されたら、子の外部キーを NULL にする
Restrict親に子が存在する場合、削除/更新を禁止(NoAction とほぼ同じだが、DBエンジンによって挙動が微妙に異なる)
NoAction親削除/更新時に何もしない(ただし制約違反はDB側で発生)

✅ まとめ
ReferentialAction.NoAction は、親テーブルの変更時に子テーブルへ自動処理を行わない設定です。
実際にはデータベースの外部キー制約が残っているため、整合性が取れない操作はエラーになります。

もし希望があれば、この NoAction と RestrictSQLレベルでの違いも図解付きで説明できますが、続けますか?
これを理解すると、EF Core のマイグレーション挙動がかなり明確になります。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Models
編集 | 記事一覧