記事詳細


投稿日
2026年01月03日23時55分
タイトル

[ForeignKey("UserId")] public IdentityUser? User { get; set; }の意味

内容
Csharp
[ForeignKey("UserId")] public IdentityUser? User { get; set; }

は Entity Framework (EF) / EF Core における 外部キー(Foreign Key)指定 の書き方です。

1. 前提

  • IdentityUser は ASP.NET Identity が提供する「ユーザー情報」モデル(AspNetUsers テーブルに対応)。
  • User プロパティは ナビゲーションプロパティ(関連エンティティを参照するためのプロパティ)。
  • [ForeignKey("UserId")] は、この User プロパティが UserId という外部キー列と紐づくことを明示。

2. どういう意味か

このアノテーションは

「この User ナビゲーションプロパティは、同じクラス内の UserId プロパティを外部キーとして使います」

という意味です。

例えば、エンティティがこうなっているとします:

Csharp
public class TodoItem { public int Id { get; set; } // 外部キー列 public string UserId { get; set; } = string.Empty; // ナビゲーションプロパティ [ForeignKey("UserId")] public IdentityUser? User { get; set; } }

この場合、TodoItem テーブルは次のような構造になります:

IdUserId (FK)...
1abc123...

UserId は AspNetUsers.Id を参照する外部キーになります。
User プロパティを使うと、TodoItem から直接 IdentityUser の情報を取得できます。

3. なぜ [ForeignKey] が必要か

EF Core は通常、命名規則(<NavigationName>Id)から自動的に外部キーを推測しますが、

  • 外部キーの名前が規約と違う場合
  • 複数の外部キーがある場合
  • 明示的に関連付けを指定したい場合

に [ForeignKey] 属性を使います。

4. 実際の使い方例

Csharp
// データ取得例 var todo = dbContext.TodoItems .Include(t => t.User) // 関連ユーザー情報も取得 .FirstOrDefault(t => t.Id == 1); Console.WriteLine(todo.User?.UserName);

これにより、TodoItem から直接 UserName などのユーザー情報を参照できます。

✅ まとめ
[ForeignKey("UserId")] public IdentityUser? User { get; set; }
「この User プロパティは UserId 列を外部キーとして AspNetUsers の IdentityUser と関連付ける」
という意味です。

もし希望があれば、この設定を Fluent API で書く方法も示せますが、やりますか?
そうすれば [ForeignKey] を使わずに同じ関連付けができます。

Powered by Froala Editor

添付画像

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