3

Northwind データベースのことを覚えておいてください。それ自体への自己参照を持つ Employee テーブルがあるためです。外部キーの名前は「ReportTo」などで、これは Nullable フィールドです。

EF Code First と MVC3 を使用して、手元のプロジェクトにこのようなテーブルを実装しようとしています。シナリオは次のとおりです。 User の派生元である Man クラスがあります。上記のフィールド「ReportTo」は、後者のクラス(ユーザー)に設定されています。ここにPOCOがあります:

[LocalizedAttribute("ReportTo")]
    public long ReportsTo { get; set; }
    [ForeignKey("ReportsTo")]
    public virtual IList<User> ReportsChild { get; set; }

しかし、EF はデータベースでこのフィールドを「Not Null」として生成しました。?正確に afterを使用しようとしましたが、エラーが発生するIList<User>ようです。IList<User>?また、次のように流暢な API として定義しようとしました。

modelBuilder.Entity<User>().Property(s => s.ReportsChild).IsOptional();

しかし、上記の両方の方法でこのエラーが発生します。

型 'System.Collections.Generic.IList' は、ジェネリック型またはメソッド 'System.Nullable' でパラメーター 'T' として使用するために、null 非許容値型である必要があります。

私はウェブをサーフィンしましたが、私がすでに行ったことと同様の解決策を見つけることができました.

その理由は何ですか?に変更IList<User>Userても、外部キーとして正しく機能しますか? どうすればこのエラーを乗り切ることができますか?

4

2 に答える 2

1

あなたは実際に一対多の関係を築いています。つまり、User外部キーを持っているかということです。

これを解決するには 2 つの方法があります。

  • Userそれをエンティティに転送します。IList を削除します。エンティティのタイプを使用するだけです。(従業員?)これを見

または

  • 以下を取り除きます: EF はそれを自動的にマップする必要があるためです。テーブルは、1 (そのエンティティ) 対多 ( ) の関係である、そのエンティティの IDのUserFK 列を自動的に作成します。User

    [LocalizedAttribute("ReportTo")] public long ReportsTo { get; set; } [ForeignKey("ReportsTo")]

于 2013-06-06T18:28:31.157 に答える