私はUser
0または1を持っているかもしれないものを持っていますProfile
。Profile
コードの観点からは、からアクセスできる方が便利なはずですUser
(ユーザー情報にはプロファイルよりも頻繁にアクセスするため)が、これはEFコードファーストと競合します。
class User
{
public int Id { get; set; }
[ForeignKey("Id")]
public virtual Profile Profile { get; set; }
}
class Profile
{
public int Id { get; set; }
}
これをDbContextに入れると、テーブルが作成されます。これは、明らかな原則として、前に作成しUser
なければ作成できないProfile
=>badです。User
最も簡単な(愚かなIの)解決策は明らかです:
class User
{
public int Id { get; set; }
}
class Profile
{
public int Id { get; set; }
[ForeignKey("Id")]
public virtual User User { get; set; }
}
これにより、データベースのより期待される動作が得られます。
しかし...私はこの解決策が最善のアプローチではないと感じています。たとえば、遅延読み込みを使用してすべてのプロファイルからすべてのユーザーにアクセスすることはできません。したがって、質問は「(DataAnnotationおよびFluentAPIを介して)1対0/1の関係を適切に設定する方法」です。言い換えれば、「「1User
対0 Profile
」の関係を適切に設定するにはどうすればよいですか?」
多分私はそれが完全に間違っていると思います...