0

мне нужно создать обнуляемого внешний ключ для один-ко-многим отношений на одной и той же таблице:EF Fluent API - Nullable FK для один-ко-многим в одной таблице

public class NavigationMenu 
{ 

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

    public NavigationMenu() 
    { 
     MenuChildren = new HashSet<NavigationMenu>(); 
    } 

    public string Text { get; set; } 
    public string Action { get; set; } 
    public string Controller { get; set; } 
    public string Icon { get; set; } 
    public bool Selected { get; set; } 

    public int? NavigationMenuId { get; set; } 

    public virtual ICollection<NavigationMenu> MenuChildren { get; set; } 

    public virtual NavigationMenu NavigationMenus2 { get; set; } 

} 

с Fluent Апи, но я не знаю, какое определение является правильным, это:

modelBuilder.Entity<NavigationMenu>() 
      .HasOptional(c => c.NavigationMenus2) 
      .WithMany(c => c.MenuChildren) 
      .HasForeignKey(c => c.NavigationMenuId); 

или:

modelBuilder.Entity<NavigationMenu>() 
      .HasMany(e => e.MenuChildren) 
      .WithOptional(e => e.NavigationMenus2) 
      .HasForeignKey(e => e.NavigationMenuId); 
+0

Оба правильные. –

ответ

1

Оба правильно, HasMany отношения означают, что можно б e любое количество связанных объектов, равно 0. (Таким образом, значение NULL FK прекрасное.)

. Отношения «один-к-одному», это должно быть указано явно, если это необходимо или нет.