无法在一列上设置主键和外键
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; }
}
在OfficeAssignment
class中设置主键属性([Key]
)就足够了,在Instructor
class中我们需要设置这样的属性:
[InverseProperty("Instructor")]
收集 CourseAssignments
。这将按预期工作。
所以我尝试使用 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; }
}
在OfficeAssignment
class中设置主键属性([Key]
)就足够了,在Instructor
class中我们需要设置这样的属性:
[InverseProperty("Instructor")]
收集 CourseAssignments
。这将按预期工作。