【发布时间】:2019-04-28 10:43:08
【问题描述】:
我知道有一些关于 1:0..1-relationships 的问题已回答。我查看了this 和this,但认为它们不适用于我的问题。
我在 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);
}
但我不认为这是正确的。我还没有为FrontPageItem 制作CRUD 视图,但是如果我尝试直接在VS 的SQL Server 对象资源管理器中添加项目,我必须为PK 输入一个值。
我做错了什么?
【问题讨论】:
-
那么 FrontPageItem 必须有文章和网页还是只有其中之一?
-
@Nikolaus 只有其中之一。
-
答案是否符合您的需求?
-
@Nikolaus 我还不知道。我明天看看。
标签: c# ef-code-first entity-framework-core