2015-11-19 20 views
-1

我有2個實體與一個多對多的關係:導演上下文中使用自定義命名的連接表的多對多實體關係

[Table("Student", Schema = "School")] 
    public class Student 
    { 
     public long ID { get; set; } 

     public virtual List<Teacher> Teachers { get; set; } 

     //... 
    } 

    [Table("Teacher", Schema = "School")] 
    public class Teacher 
    { 
     public long ID { get; set; } 

     public virtual List<Student> Students { get; set; } 

     //... 
    } 

我流利的API中指定如何構建連接表作爲例如:

public StudentMap(string schema) 
    { 
     //Where schema = "School" 
     HasMany(p => p.Teachers) 
      .WithMany(p => p.Students) 
      .Map(m => 
      { 
       m.ToTable("StudentsTeachers", schema); 
       m.MapLeftKey("Student_ID"); 
       m.MapRightKey("Teacher_ID"); 
      }); 
    } 

然而,當我去訪問學生的教師導航對象,則默認爲EF約定,而不是我所指定的連接表。我怎麼去指定SchoolContext我們應該看School.StudentsTeachers表而不是dbo.StudentTeachers

問題不在於指定連接表或生成多對多關係。那些工作正常。嘗試使用實體時出現問題,我需要一種方法來指定關係應該使用我指定的Join表,而不是EF命名約定。如上所示,我可以通過使用表格屬性來解決與EF使用其約定相類似的問題。現在我正在尋找除與問候多對多的等效答案加入該表存在,但並沒有一個明確的模型

+2

的可能的複製[如何爲多對多關係表指定模式?](http://stackoverflow.com/questions/17113541/how-to-specify-a-schema-for-a-many-to-many-relationship -表) –

回答

0

我認爲這應該工作:

[Table("Student", Schema = "School")] 
public class Student 
{ 
    [Key,Column("Student_ID")] 
    public long ID { get; set; } 

    public virtual List<Teacher> Teachers { get; set; } 

    //... 
} 

[Table("Teacher", Schema = "School")] 
public class Teacher 
{ 
    [Key,Column("Teacher_ID")] 
    public long ID { get; set; } 

    public virtual List<Student> Students { get; set; } 

    //... 
} 

public StudentMap() 
{ 
    HasMany(p => p.Teachers) 
    .WithMany(p => p.Students) 
    .Map(m => 
     { 
     m.ToTable("StudentsTeachers", "School"); 
     m.MapLeftKey(p => p.ID); 
     m.MapRightKey(p => p.ID); 
     }); 
} 
相關問題