Как определить дополнительные отношения внешнего ключа в FluentAPI / аннотациях данных с помощью Entity Framework?

У меня есть (пример) приложение с следующий код:

public class Posts
{

    [Key]
    [Required]
    public int ID { get; set; }

    [Required]
    public string TypeOfPost { get; set; }

    public int PollID { get; set; }
    public virtual Poll Poll { get; set; }

    public int PostID { get; set; }
    public virtual Post Post { get; set; }

}

В принципе, я не знаю, есть ли лучший способ сделать это, но у меня есть список сообщений, и люди могут выбрать, будет ли это опрос или Сообщение , Поскольку Entity Framework не работает с Enums, я просто или в виде строки в TypeOfPost , а затем в приложении я программно запрашиваю либо Poll, либо Post на основе значения TypeOfPost .

Я не думаю, что есть возможность установить «Требуется только один» или что-то подобное, поэтому я беру на себя все проверки и прочее в приложении. (Если кто знает способ получше, скажите, пожалуйста!).

В любом случае, проблема в том, что я могу заставить это работать нормально, зайдя в SQL Management Studio и вручную отредактировав схему, чтобы разрешить нули, но я просто не могу понять, как это сделать в FluentAPI, и мне нужно некоторая помощь.

Я пробовал оба из следующих вариантов:

modelBuilder.Entity<Post>()
    .HasOptional(x => x.Poll).WithOptionalDependent();

modelBuilder.Entity<Post>()
    .HasOptional(x => x.Poll).WithOptionalPrincipal();

Первый, кажется, создает дополнительный столбец в базе данных, который допускает значения NULL, а второй, похоже, ничего не делает.

Я считаю, что первый мне нужен, но мне нужно использовать его в сочетании с [ForeignKey] в классе Post . Если я прав, должен ли [ForeignKey] идти на виртуальное свойство или идентификатор свойства?

Кроме того, в чем разница между WithOptionalDependent и WithOptionalPrincipal ? - Я читал на MSDN, но я действительно не понимаю разницы.

22
задан Morteza Tourani 2 October 2016 в 07:49
поделиться