Entity framework 如何使用CodeFirst(EntityFramework,Microsoft)生成可为null的复杂列

Entity framework 如何使用CodeFirst(EntityFramework,Microsoft)生成可为null的复杂列,entity-framework,entity-framework-4.1,ef-code-first,Entity Framework,Entity Framework 4.1,Ef Code First,我有一个如下的定义,本质上,我想在EmailAccount类中创建它: 公共电子邮件用户?EmailUserAccountInfo{get;set;} 编译器给了我一个关于不可为null的类型的错误。我的目标是让EmailUser成为可选的。我有点困惑,因为我可以直接设置EmailUserAccountInfo=null var r = new EmailAccount() { EmailUs

我有一个如下的定义,本质上,我想在EmailAccount类中创建它:

公共电子邮件用户?EmailUserAccountInfo{get;set;}

编译器给了我一个关于不可为null的类型的错误。我的目标是让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; }
}

如果添加外键并将其标记为可空,则可以执行此操作:

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; }
}

请首先参阅有关代码命名约定的内容。(向下滚动至关系约定)

如果添加外键并将其标记为空,则可以执行此操作:

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; }
}

请首先参阅有关代码命名约定的内容。(向下滚动至关系约定)

谢谢Tsushin,你能解释一下虚拟关键词对数据库的含义吗?另外,我对添加外键列是否显式产生影响也有一些疑问。添加外键显式允许您将其标记为null-able,从而指示EF关系为零对一。至于虚拟关键字,请参阅Thank Tsushin,你能解释一下虚拟关键字对于数据库的含义吗?此外,我还怀疑是否显式添加外键列会产生影响。显式添加外键允许将其标记为可空,从而指示EF关系为零对一。至于虚拟关键字,请参阅