我有多对多关系学生课程,我实现了使用虚拟馆藏列表,我得到了下一个生成的迁移代码:
CreateTable(
"dbo.PersonCourses",
c => new
{
Person_Id = c.Int(nullable: false),
Course_Id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.Person_Id, t.Course_Id })
.ForeignKey("dbo.People", t => t.Person_Id, cascadeDelete: true)
.ForeignKey("dbo.Courses", t => t.Course_Id, cascadeDelete: true)
.Index(t => t.Person_Id)
.Index(t => t.Course_Id);
现在我想将表PersonCourses映射到一些C#类,我写了
[Table("PersonCourses")]
public class PersonCourses
{
[ForeignKey("Person")]
[Required]
public int PersonId { get; set; }
[ForeignKey("Course")]
[Required]
public int CourseId { get; set; }
}
但它失败了:" PersonCourses"没有键定义。定义此EntityType的键。
答案 0 :(得分:1)
您应该添加属性[Key]属性PersonCoursesId:
public partial class Category
{
[Key]
public int PersonCoursesId { get; set; }
[ForeignKey("Person")]
public int PersonId { get; set; }
[ForeignKey("Course")]
public int CourseId { get; set; }
}
问题是EF只有在知道表的主键时才能工作。默认情况下,EF识别为名称为Id的主键属性。如果您的表有另一个主键,您可以使用属性[Key]标记它,或者使用流畅的配置设置Key。
希望这有帮助。
答案 1 :(得分:1)
您需要构成主键的属性上方的[Key]属性。对于复合主键,还需要指定列顺序。见https://msdn.microsoft.com/en-us/data/jj591583.aspx#Composite