在实体框架中使用外键作为主键的正确方法是什么?

What is the correct way to use a foreign key as a primary key in Entity Framework?

提问人:hamstar 提问时间:10/30/2023 最后编辑:marc_shamstar 更新时间:10/30/2023 访问量:71

问:

下面是 id 生成实体:

public class ConceptDataEntry 
{
    [Key]
    public long Id { get; set; }
}

下面是一个依赖于实体生成的 ID 的示例实体:ConceptDataEntry

public class GlobalLocationDataEntry 
{
    [Key]
    //[InverseProperty("Id")] incorrect?
    public ConceptDataEntry Id { get; set; } = null!;
    public double Longitude { get; set; }
    public double Latitude { get; set; }
    public double Altitude { get; set; }
    public double MapRadius { get; set; }
}

我不清楚这是否是实现这一点的正确方法。

我还想确保每个实体使用 id from 不会在彼此之间共享 id 值,因为它们在两种方式上都应该是唯一的。但是,我可以手动实现该约束。ConceptDataEntry

C# sql-server 实体框架 主键

评论


答:

0赞 lordnoob 10/30/2023 #1

在类中,添加显式外键属性,然后导航到父实体:GlobalLocationDataEntry

public class GlobalLocationDataEntry 
{
    [Key]
    [ForeignKey(nameof(ConceptDataEntry))]
    public long Id { get; set; };

    public double Longitude { get; set; }

    public double Latitude { get; set; }

    public double Altitude { get; set; }

    public double MapRadius { get; set; }

    public ConceptDataEntry? ConceptDataEntry { get; set; }
}

在这里,我使用了显式属性来配置外键,但你也可以允许 EF Core 按约定发现关系。您可以在文档中找到有关此内容的更多详细信息: