简体   繁体   English

实体框架中的ForeignKey错误

[英]ForeignKey error in Entity Framework

I am planning a simple two table structure: 我正在计划一个简单的两个表结构:

1) Teacher Table : 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) Subjects taught by a teacher : 2)老师教授的科目:

public class Teacher_Subject_Map
{
    [ForeignKey("TeacherAccount")]
    public string Email { get; set; }
    public string Subjects;
}

My Concept is : For email identifying a teacher, there can be multiple subjects, which is taught by that teacher. 我的概念是:对于确定一名教师的电子邮件,可以有多个科目,由该教师教。

How ever I am getting this : 我怎么得到这个:

The ForeignKeyAttribute on property 'Email' on type 'xpertsdesk.Models.Teacher_Subject_Map' is not valid. 类型为'xpertsdesk.Models.Teacher_Subject_Map'的属性'Email'上的ForeignKeyAttribute无效。 The navigation property 'TeacherAccount' was not found on the dependent type 'xpertsdesk.Models.Teacher_Subject_Map'. 在依赖类型“ xpertsdesk.Models.Teacher_Subject_Map”上找不到导航属性“ TeacherAccount”。 The Name value should be a valid navigation property name. Name值应为有效的导航属性名称。

as error in mvc5. 作为MVC5中的错误。

What I am trying to do : 我正在尝试做的是:

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

What am I doing wrong ? 我究竟做错了什么 ?

If a subject can be taught by only one teacher (one-to-many relationship): 如果一个学科只能由一位老师教授(一对多关系):
In this case there will not be a mapping table. 在这种情况下,将没有映射表。

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; }
}

If a subject can be taught by more teachers (many-to-many relationship): 如果可以由更多的老师来授课(多对多关系):
The Subject class would be like this. Subject类将是这样。

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

    /* other properties if needed */

    public virtual ICollection<Teacher> Teachers { get; set; }
}

And then you can configure the many-to-many relationship in your own DbContext class: 然后,您可以在自己的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");
        });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM