2016-05-08 3 views
0
私は、単純な2つのテーブル構造計画してい

のForeignKeyエラー

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)対象者:

1)教師表を: 先生を特定する電子メールには、その先生が教える複数の科目が存在することがあります。私はこれを取得していますどのようにこれまで

:タイプ のプロパティ[メール]に

ForeignKeyAttributeは「xpertsdesk.Models.Teacher_Subject_Map」は有効ではありません。ナビゲーション プロパティ 'TeacherAccount'が依存型 'xpertsdesk.Models.Teacher_Subject_Map'に見つかりませんでした。 [名前]の値は、 有効なナビゲーションプロパティ名である必要があります。

mvc5でエラーが発生しました。

私が行うには何をしようとしています:私は間違って

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

何をしているのですか?

答えて

1

教師が1人の教師しか教えられない場合(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

関連する問題