Entity framework 首先在EF6代码中映射可选的一对一

Entity framework 首先在EF6代码中映射可选的一对一,entity-framework,Entity Framework,关于一对一映射,我似乎遇到了很多类似的问题,但我还是被这个特殊的情况所困扰 考虑到以下几点: // model class Parent { public int ParentId { get; set; } // children public virtual ICollection<Child> Children { get; set; }; // active child public int ActiveChildId { get

关于一对一映射,我似乎遇到了很多类似的问题,但我还是被这个特殊的情况所困扰

考虑到以下几点:

// model
class Parent
{
    public int ParentId { get; set; }
    // children   
    public virtual ICollection<Child> Children { get; set; };
    // active child
    public int ActiveChildId { get; set; }
    public virtual Child ActiveChild { get;set; }
}

class Child
{
    public int ChildId { get; set; }
    public int ParentId { get; set; }
    public virtual Parent Parent { get; set; }
}

首先,您需要将id属性设置为可选:

public int? ActiveChildId { get; set; }
如果您使用默认约定,这将起作用。在您的情况下,使用映射时,
HasForeignKey
对于可选关系不可用。您可以通过使用
HasMany
方法解决此问题,而无需指定另一端,如下所示:

HasOptional(parent => parent.ActiveChild)
    .WithMany()
    .HasForeignKey(parent => parent.ActiveChildId)
有关更多背景信息,您可以在此处查看完整的说明:

哦,是的,实际上在我的代码中,ActiveChildId是可选的
int?
。谢谢
HasOptional(parent => parent.ActiveChild)
    .WithMany()
    .HasForeignKey(parent => parent.ActiveChildId)