2016-05-08 2 views
0

Я планирую простую структуру две таблицы:ForeignKey ошибка в 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; 
} 

Моя концепция is: Для электронной почты, идентифицирующей учителя, может быть несколько предметов, которые учат этот учитель.

Как всегда я получаю это:

ForeignKeyAttribute на собственность «Электронная почта» на тип «xpertsdesk.Models.Teacher_Subject_Map» не является допустимым. Навигация свойство 'TeacherAccount' не было найдено по зависимому типу 'xpertsdesk.Models.Teacher_Subject_Map'. Значение Name должно быть действительным именем навигационной функции.

как ошибка в 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

Going вашего первым подходом, я получаю, «Внешний кодовое имя„TeacherAccount“был не найден на зависимом типе «Teacher_Subject_Map». Значение Name должно быть разделенным запятыми списком имен свойств внешнего ключа ». – Priyabrata

+0

Я исправил вышеприведенную ошибку, и я вернулся к «EntityType» Subject «не имеет ключа» – Priyabrata

+0

Исправлено! Я не сделал ключ свойством. – Priyabrata

Смежные вопросы