CodeFirst(EntityFramework、Microsoft)を使用してnull可能な複合列を作成する方法

私は以下のような定義を持っており、基本的にEmailAccountクラスでこれを作成したいと考えています。

一般的なEmailUser? EmailUserAccountInfo {get; set;}

コンパイラはnullableでない型についてエラーを返します。私の目標は、EmailUserをオプションにしたいということです。私はEmailUserAccountInfo = nullを直接設定できるので、混乱しています。

var r = new EmailAccount()
                        {
                            EmailUserAccountInfo = null,
                            Id = 1001
                        };



public class EmailAccount
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public EmailUser EmailUserAccountInfo { get; set; }
}


public class EmailUser
{ 
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public EmailAccount EmailAcount { get; set; }

    public string EmailAddress { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public int Temperature { get; set; }
    public string WeatherString { get; set; }

    public ImageDetail ImageOfUser { get; set; }
}
1

1 答え

外部キーを追加し、そのNULL値をマークすると、これを行うことができます:

public class EmailAccount
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

   //Foreign key    
    public int? EmailUserAccountInfoId { get; set; }

   //Navigation property
    public virtual EmailUser EmailUserAccountInfo { get; set; }
}

この命名規則については、このドキュメントを参照してください。コードファースト。 ([関連条約]までスクロールします)

1
追加された
ありがとうTsuushin、バーチャルキーワードの含意がデータベースに関するものであることを説明できますか?また、私は、外来キー列を明示的に追加することで違いが生じるかどうか疑問に思っています。
追加された 著者 Peter Kellner,
外部キーを明示的に追加すると、それをヌル可能としてマークすることができます。これにより、関係がゼロから1になるようにEFに指示します。
追加された 著者 ECC-Dan,
仮想キーワードについては、この質問への回答
追加された 著者 ECC-Dan,