如何处理同一实体类型的多个一对一或零关系?

问题描述 投票:0回答:1

据我所知,通过在相关实体上共享相同的ID,EF6实现了一对零或一的关系被投影到数据库中]

tutorial说:

一对零或一对一关系发生在主键为一个关系表中的另一个表中,该表成为PK&FK作为SQL Server。因此,我们需要在这样一个EF在数据库中创建Student和StudentAddresses表的方式并使Student表中的StudentId列为PrimaryKey(PK)和StudentAddresses表中的StudentAddressId列为PK和都为ForeignKey(FK)。

因此,如果Website具有可选的WebsitePage,则可能会有这个:

public class Website
{
    public int Id { get; set; }
    public virtual WebsitePage Page { get; set; }
}


public class WebsitePage
{
    [Key, ForeignKey( nameof( Website ) )]
    public int Id { get; set; } 
    public virtual Website Website { get; set; }
}

但是如果我想要多个可选页面怎么办?

public class Website
{
    public int Id { get; set; }
    public virtual WebsitePage AboutPage { get; set; }
    public virtual WebsitePage ServicesPage { get; set; }
    public virtual WebsitePage CaseStudyPage { get; set; }
}


public class WebsitePage
{
    [Key, ForeignKey( nameof( Website ) )]
    public int Id { get; set; } 
    public virtual Website Website { get; set; }
}

可能今天我的谷歌搜索不合标准,但我无法在网上或在此处找到任何此类示例。

我错过了什么,还是我的理解有缺陷?

据我所知,EF6通过在相关实体上共享相同的ID来实现一对一或一对一的关系被投影到数据库中。该教程说:一对零或一...] >

asp.net-mvc entity-framework primary-key
1个回答
1
投票

起初,我误解了您想要实现的关系的标题。当我们在一个模型中有多个模型的多个引用时,就无法实现一对零或一个关系。您要求的是一对多关系;一方面,我们有1个WebsitePage对象,另一方面,我们有n个相关的Website对象,它们可以具有1-3个WebsitePage(请参阅注释)。为此,您可以使用Nullable外键

。在导航栏旁边提供可空的ID属性:
© www.soinside.com 2019 - 2024. All rights reserved.