簡體   English   中英

實體框架中的ForeignKey錯誤

[英]ForeignKey error in Entity Framework

我正在計划一個簡單的兩個表結構:

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

我的概念是:對於確定一名教師的電子郵件,可以有多個科目,由該教師教。

我怎么得到這個:

類型為'xpertsdesk.Models.Teacher_Subject_Map'的屬性'Email'上的ForeignKeyAttribute無效。 在依賴類型“ xpertsdesk.Models.Teacher_Subject_Map”上找不到導航屬性“ TeacherAccount”。 Name值應為有效的導航屬性名稱。

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

如果可以由更多的老師來授課(多對多關系):
Subject類將是這樣。

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

    /* other properties if needed */

    public virtual ICollection<Teacher> Teachers { 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");
        });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM