C# 实体框架中的ForeignKey错误

C# 实体框架中的ForeignKey错误,c#,asp.net-mvc-5,entity-framework-5,C#,Asp.net Mvc 5,Entity Framework 5,我正在计划一个简单的两表结构: 1) 教师表: public class TeacherAccount { [DataType(DataType.Text), Required()] public string Name { get; set; } [DataType(DataType.Text), Required()] public string Address { get; set; } [DataType(DataType.EmailAddre

我正在计划一个简单的两表结构:

1) 教师表:

public class TeacherAccount
{
    [DataType(DataType.Text), Required()]
    public string Name { get; set; }

    [DataType(DataType.Text), Required()]
    public string Address { get; set; }

    [DataType(DataType.EmailAddress), Required(), Key]
    public string Email { get; set; }

    [DataType(DataType.Password), Required()]
    public string Password { get; set; }

    [DataType(DataType.Password), Compare("Password"), Required(), NotMapped]
    public string ConfirmPassword { get; set; }

    public bool Activated { get; set; }

}
2) 教师讲授的科目:

public class Teacher_Subject_Map
{
    [ForeignKey("TeacherAccount")]
    public string Email { get; set; }
    public string Subjects;
}
我的想法是: 对于识别教师的电子邮件,可以有多个科目,由该教师讲授

我是如何得到这个的:

类型的属性“Email”上的ForeignKeyAttribute “xpertsdesk.Models.Teacher\u Subject\u Map”无效。导航 在依赖类型上找不到属性“TeacherAccount” “xpertsdesk.Models.Teacher\u Subject\u Map”。名称值应为 有效的导航属性名称

作为mvc5中的错误

我想做的是:

Create table Teacher(Email varchar(30) Primary Key, Other Details);
Create table Subjects(Email varchar(30) References Teacher(Email), Subject varchar(30));

我做错了什么?

如果一个科目只能由一位老师教授(一对多关系):
在这种情况下,将不存在映射表

public class Subject
{
    [Key]
    public string Name { get; set; }

    // This will hold the Key of Teacher
    public string TeacherEmail { get; set; }

    [ForeignKey("TeacherEmail")]
    public virtual Teacher Teacher { get; set; }
}

public class Teacher
{
    /* the original properties comes here, e.g. Email */
    public string Email { get; set; }

    // Navigation property for taught subjects
    public virtual ICollection<Subject> Subjects { get; set; }
}
然后,您可以在自己的DbContext类中配置多对多关系:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Teacher>()
        .HasMany(teacher => teacher.Subjects)
        .WithMany(subject => subject.Teachers)
        .Map(c =>
        {
            c.ToTable("Teacher_Subject_Map");
            c.MapLeftKey("TeacherEmail");
            c.MapRightKey("SubjectName");
        });
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
建模者
.实体()
.HasMany(teacher=>teacher.Subjects)
.WithMany(subject=>subject.Teachers)
.Map(c=>
{
c、 ToTable(“教师/科目/地图”);
c、 MapLeftKey(“教师电子邮件”);
c、 MapRightKey(“主题名称”);
});
}

按照您的第一种方法,我得到“在依赖类型“教师-科目-映射”上找不到外键名称“教师帐户”。名称值应为外键属性名称的逗号分隔列表。“我已修复了上述错误,现在返回到“EntityType“科目”没有定义键”修复!我没有把钥匙当作财产。!
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Teacher>()
        .HasMany(teacher => teacher.Subjects)
        .WithMany(subject => subject.Teachers)
        .Map(c =>
        {
            c.ToTable("Teacher_Subject_Map");
            c.MapLeftKey("TeacherEmail");
            c.MapRightKey("SubjectName");
        });
}