2016-05-08 67 views
0

我打算一個簡單的兩個表結構:ForeignKey的錯誤

1)教師表:

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

我的概念:由老師教

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)主題是: 對於標識教師的電子郵件,可以有多個科目,由該教師教授。

我怎麼變得這麼:

的ForeignKeyAttribute財產「電子郵件」在 型「xpertsdesk.Models.Teacher_Subject_Map」是無效的。在依賴類型 'xpertsdesk.Models.Teacher_Subject_Map'上未找到導航 屬性'TeacherAccount'。名稱值應該是 有效的導航屬性名稱。

作爲mvc5中的錯誤。

我所試圖做的事:

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

我在做什麼錯?

回答

1

如果一個主題只能由一位教師教授(一對多關係):
在這種情況下,不會有映射表。

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"); 
     }); 
} 
+0

你的第一個方法去,我得到「外鍵名‘TeacherAccount’是沒有在依賴類型'Teacher_Subject_Map'上找到。名稱值應該是逗號分隔的外鍵屬性名稱列表。「 – Priyabrata

+0

我修復了上面的錯誤,我回到了「EntityType'Subject'沒有定義鍵' – Priyabrata

+0

修復了它!我沒有把鑰匙變成財產。 – Priyabrata