从Entity Framework中的现有表创建模型

时间:2015-02-23 12:39:19

标签: c# entity-framework many-to-many asp.net-web-api

我有多对多关系学生课程,我实现了使用虚拟馆藏列表,我得到了下一个生成的迁移代码:

 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的键。

2 个答案:

答案 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