У меня есть (пример) приложения со следующим кодом:
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; }
}
В принципе, я не знаю, есть ли лучший способ сделать это, но у меня есть список сообщений,и люди могут выбрать, является ли это Poll
или Post
, так как Entity Framework не работает с Enums, я просто сохраняю его как строку в TypeOfPost
, а затем в приложении я программно запрашиваю любой из опросов.или Post, основанный на значении TypeOfPost
.
. Я не думаю, что в любом случае есть настройка «Только один обязательный» или аналогичный, поэтому я выполняю все проверки и прочее в приложении.(Если кто-нибудь знает лучший способ, скажите, пожалуйста!).
В любом случае, проблема в том, что я могу получить эту работу нормально, зайдя в SQL Management Studio и вручную отредактировав схему, чтобы разрешить нулевые значения - нопросто не могу понять, как это сделать в FluentAPI, и мне нужна помощь.
Я пробовал оба из следующих действий:
modelBuilder.Entity<Post>()
.HasOptional(x => x.Poll).WithOptionalDependent();
modelBuilder.Entity<Post>()
.HasOptional(x => x.Poll).WithOptionalPrincipal();
Первый, кажется, создает дополнительныйстолбец в базе данных, который допускает нулевые значения, а второй, похоже, ничего не делает.
Я считаю, что первый - тот, который мне нужен, но мне нужно использовать его в сочетании с [ForeignKey]в классе Post
.Если я здесь прав, должен ли [ForeignKey] указывать виртуальное свойство или идентификатор свойства?
Кроме того, какова фактическая разница между WithOptionalDependent
и WithOptionalPrincipal
?- Я читал на MSDN, но я действительно не понимаю разницу.