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

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

这是 id 生成实体:

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

这是一个依赖于

ConceptDataEntry
实体生成的 ID 的示例实体:

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; }
}

我不清楚这是否是实现此目的的正确方法。

我还想确保使用来自

ConceptDataEntry
的 id 的每个实体不会在彼此之间共享 id 值,因为它们应该是唯一的。不过,我可以手动实现该约束。

c# sql-server entity-framework foreign-keys primary-key
1个回答
0
投票

在您的

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 按约定发现关系。您可以在文档中找到有关此内容的更多详细信息:

© www.soinside.com 2019 - 2024. All rights reserved.