Я знаю, что на SO есть ответы на некоторые вопросы об отношениях 1: 0..1. Я смотрел на это и это , но не думаю, что они относятся к моему вопросу.
У меня есть эти три (упрощенные) модели в CMS-системе.
public class FrontPageItem
{
public int Id { get; set; }
public int ItemType { get; set; } // 1 = Article, 2 = WebPage, etc...
public int? ArticleId { get; set; }
public Article Article { get; set; }
public int? WebPageId { get; set; }
public WebPage WebPage { get; set; }
}
public class Article
{
public int Id { get; set; }
public string Title { get; set; }
public string Preamble { get; set; }
public string MainText { get; set; }
public int? FrontPageItemId { get; set; }
public FrontPageItem FrontPageItem { get; set; }
}
public class WebPage
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int? FrontPageItemId { get; set; }
public FrontPageItem FrontPageItem { get; set; }
}
Отношения между FrontPageItem
и каждым из различных типов элементов являются один к нулю или один. Элемент может существовать без добавления в качестве FrontPageItem
, что означает, что FrontPageItem
имеет отношение только к одному элементу, либо Article
, либо WebPage
.
В попытке настроить отношения я добавил этот бит кода:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Article>()
.HasOne(p => p.FrontPageItem)
.WithOne(i => i.Article)
.HasForeignKey<FrontPageItem>(b => b.Id);
modelBuilder.Entity<WebPage>()
.HasOne(p => p.FrontPageItem)
.WithOne(i => i.WebPage)
.HasForeignKey<FrontPageItem>(b => b.Id);
}
Но я не думаю, что это правильно. Я еще не сделал CRUD-представления для FrontPageItem
, но если я пытаюсь добавить элементы непосредственно в проводнике объектов SQL Server в VS, я должен ввести значение для PK.
Что я делаю не так?