[英]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.