无法在一列上设置主键和外键

Can't set primary key and foreign key on one column

所以我尝试使用 EF Core 创建一些 ASP.NET 项目。

我想将一个实体的属性设置为另一个实体的主键和外键。关系是0..1 - 1。我使用 DataAnnotations:

public class OfficeAssignment
{
    [Key, ForeignKey("InstructorID")]
    public int InstructorID { get; set; }
    public Instructor Instructor { get; set; }
    public string Location { get; set; }
}

但我一直将 InstructorID 列作为 PK,将 InstructorID1 列作为 FK...任何想法,为什么 EF 会这样,我怎样才能实现我的目标?

您应该尽可能地遵循约定优于配置。一个 OfficeAssignment 实体应该有一个 OfficeAssignmentId PK,像这样:

public class OfficeAssignment
{
    public int OfficeAssignmentId { get; set; }

    //Notice that Id does not have an uppercase D
    public int InstructorId { get; set; }
    public string Location { get; set; }

    public Instructor Instructor { get; set; }
}

但是,如果您不想遵循常规约定,ForeignKey 属性中的 属性 的名称与其声明的位置相反:

public class OfficeAssignment
{
    [Key, ForeignKey("Instructor")]
    public int InstructorId { get; set; }
    public string Location { get; set; }

    public Instructor Instructor { get; set; }
}

而且,如果你想保持编译时安全:

public class OfficeAssignment
{
    [Key, ForeignKey(nameof(Instructor))]
    public int InstructorId { get; set; }
    public string Location { get; set; }

    public Instructor Instructor { get; set; }
}

OfficeAssignmentclass中设置主键属性([Key])就足够了,在Instructorclass中我们需要设置这样的属性:

[InverseProperty("Instructor")]

收集 CourseAssignments。这将按预期工作。